0
点赞
收藏
分享

微信扫一扫

Python编程:排序算法之归并排序


归并排序


  • 时间复杂度O(nlogn)
  • 空间复杂度O(n)

假设现在的列表分两段有序,将其合成为一个有序列表


  • 分解: 将列表越分越小,直至分成一个元素
  • 一个元素是有序的
  • 合并:将两个有序的列表合并,列表越来越大

代码实现

# 归并排序
import random
import sys
sys.setrecursionlimit(10000) # 设置递归深度默认1000

# 一次归并,合并有序序列
def merge(lst, low, mid, high):
i = low
j = mid + 1
lst_temp = []
while i<=mid and j <= high:
if lst[i] <= lst[j]:
lst_temp.append(lst[i])
i += 1
else:
lst_temp.append(lst[j])
j += 1

while i <= mid:
lst_temp.append(lst[i])
i += 1

while j <= high:
lst_temp.append(lst[j])
j += 1

lst[low: high+1] = lst_temp


#归并排序
def merge_sort(lst, low, high):
if low < high:
mid = (low + high)//2
merge_sort(lst, low, mid)
merge_sort(lst, mid+1, high)
merge(lst, low, mid, high)


lst = list(range(10))
random.shuffle(lst)
merge_sort(lst, 0, 9)
print(lst)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]



举报

相关推荐

0 条评论