首页 > 编程语言 > 详细

数据结构与算法(18)——归并排序

时间:2020-07-23 22:03:29      阅读:73      评论:0      收藏:0      [点我收藏+]
  • 归并排序

算法处理思路:将数据表持续分裂成两半,对两半分别进行归并排序。可以用递归的思想解决。

其中,递归结束的基本条件是数据表仅有1个数据项。

缩小规模:将数据表持续分裂为相等的两半,规模减小为原来的1/2.

调用自身:将两半分别调用自身排序,然后将分别排好序的两半进行归并,得到排好序的数据表。

技术分享图片

 

 

  • 代码实现
def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    middle = len(lst) // 2
    left = merge_sort(lst[:middle])
    right = merge_sort(lst[middle:])

    merged = []
    while left and right:
        if left[0] <= right[0]:
            merged.append(left.pop(0))
        else:
            merged.append(right.pop(0))
    merged.extend(right if right else left)
    return merged
if __name__ == "__main__":
    alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    print(merge_sort(alist))
  • 时间复杂度分析

分裂过程时间复杂度:O(log n)

归并归并过程时间复杂度O(n)

因此归并排序的时间复杂度O(n log n),并且十分稳定。

但是,归并排序增加了额外1倍的存储空间用于归并。因此对于大规模数据集,需要慎重考虑

数据结构与算法(18)——归并排序

原文:https://www.cnblogs.com/yeshengCqupt/p/13367151.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!