归并排序

归并排序(容易错)

#%%
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)

# %%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值