归并排序——分治(python实现)

1.算法思想

归并排序(Merge sort)与快速排序算法十分类似,也是将待排序数据分成两个部分,然后将两个子部分进行递归的归并排序;最后将已经有序的两个子部分进行合并,最终完成排序。

2.算法分析

归并排序的基本思路是先找到一个数组的中间下标mid,然后以这个mid为中心,对两边分别进行排序,之后我们再根据两边已经排好序的子数组,重新进行值大小分配。

(1)利用分治算法思想将待排序的序列递归分成细度为1的子序列。

(2)此时子序列只有一个元素,无需排序,两两进行简单归并。

(3)归并到上一层级后继续归并,归并到更高层级。

(4)直至归并完成,完成排序工作。

 

 3.实现代码

def merge_sort(seq):
    if len(seq) < 2:
        return seq
    else:
        mid = len(seq) // 2
        left = merge_sort(seq[:mid])
        right = merge_sort(seq[mid:])
        res = []
        while left and right:
            if left[-1] >= right[-1]:
                res.append(left.pop())
            else:
                res.append(right.pop())
        res.reverse()
        return left + right + res

if __name__ == "__main__":
    test_list = [23, 45, 12, 3, 62, 32, 45, 17]
    print(merge_sort(test_list))

 输出结果:

[3, 12, 17, 23, 32, 45, 45, 62]

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

New_Teen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值