python实现归并排序

末蓝、 2022-11-02 11:55 339阅读 0赞

归并排序
“归并”是将两个或者两个以上的有序表组成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为一,然后两两归并,得到n//2个长度为2或1的有序表;再两两归并,…直到合并成一个长度为n的有序表为止,这种方法称为2-路归并排序。
在这里插入图片描述
归并算法动态实现:
在这里插入图片描述
实现代码如下:

  1. #merge的功能是将前后相邻的两个有序表归并为一个有序表的算法。
  2. def merge(left, right):
  3. ll, rr = 0, 0
  4. result = []
  5. while ll < len(left) and rr < len(right):
  6. if left[ll] < right[rr]:
  7. result.append(left[ll])
  8. ll += 1
  9. else:
  10. result.append(right[rr])
  11. rr += 1
  12. result+=left[ll:]
  13. result+=right[rr:]
  14. return result
  15. def merge_sort(alist):
  16. if len(alist) <= 1:
  17. return alist
  18. num = len(alist) // 2 # 从中间划分两个子序列
  19. left = merge_sort(alist[:num]) # 对左侧子序列进行递归排序
  20. right = merge_sort(alist[num:]) # 对右侧子序列进行递归排序
  21. return merge(left, right) #归并
  22. tesl=[1,3,45,23,23,12,43,45,33,21]
  23. print(merge_sort(tesl))
  24. #[1, 3, 12, 21, 23, 23, 33, 43, 45, 45]

空间效率:需要n个辅助空间,因此空间复杂度为O(n)
时间效率:归并时间复杂度为O(n),一共进行log2 N趟,因此时间复杂度为O(nlog2 N)
它是一种稳定的排序算法。

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python 排序(三)归并排序

    一、介绍 归并排序与快速排序都是利用了分治的策略 基本原理与思想: 1、将一个序列从中间位置分成两个序列 2、将两个子序列重复第一步的操作,直到所有子序列长度为一

    相关 python实现归并排序

    归并排序 “归并"是将两个或者两个以上的有序表组成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为一,然后两两归并,得到n//2个长度为