归并排序 python 实现
原理参考:https://zhuanlan.zhihu.com/p/124356219
代码实现:
n = 5
nums = [3, 1, 2, 4, 5]
def mergesort(l, r):
if l >= r: return # 长度小于等于1,无需排序,返回
mid = l + r >> 1
mergesort(l, mid)
mergesort(mid+1, r)
tmp = nums[l:r+1] # 用来暂时存储
k, i, j = 0, l, mid+1
while i <= mid and j <= r: # 左边右边进行比较,把小的放入tmp中
if nums[i] <= nums[j]:
tmp[k] = nums[i]
k += 1; i += 1
else:
tmp[k] = nums[j]
k += 1; j += 1
# 最后把没放完的放入tmp
while i <= mid:
tmp[k] = nums[i]
k += 1; i += 1
while j <= r:
tmp[k] = nums[j]
k += 1; j += 1
# 将tmp赋值给原数组的对应位置
nums[l:r+1] = tmp
mergesort(0, n-1)
print(" ".join(str(x) for x in nums))