归并排序(容易错)
#%%
arr = [4,6,7,8,7,1,2,3]
print(arr)
def mergeSort(arr, lo, hi):
if hi -lo <= 1: # 这里错写成 hi - lo < 1: 无法跳出递归,因为此时lo = 0, hi = 1
return
mi = (lo + hi) // 2
mergeSort(arr, lo, mi)
mergeSort(arr, mi, hi)
B = arr[lo:mi] # 浅拷贝(只是拷贝第一层),通过切片,或者list()方法
i = lo; j = 0; k = mi # j 错写成 j = lo
length = mi - lo
while j < length:
if k < hi and arr[k] < B[j]: # 曾经写错: 将arr[k] < B[j] 误写成 arr[k] < arr[j]
arr[i] = arr[k]; i += 1; k += 1
else:
arr[i] = B[j]; i += 1; j += 1 # 这里 加1 错写成:i + 1
# %%
mergeSort(arr, 0, len(arr))
# %%
print(arr)
# %%