赞
踩
归并排序(Merge sort)与快速排序算法十分类似,也是将待排序数据分成两个部分,然后将两个子部分进行递归的归并排序;最后将已经有序的两个子部分进行合并,最终完成排序。
归并排序的基本思路是先找到一个数组的中间下标mid,然后以这个mid为中心,对两边分别进行排序,之后我们再根据两边已经排好序的子数组,重新进行值大小分配。
(1)利用分治算法思想将待排序的序列递归分成细度为1的子序列。
(2)此时子序列只有一个元素,无需排序,两两进行简单归并。
(3)归并到上一层级后继续归并,归并到更高层级。
(4)直至归并完成,完成排序工作。
- 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]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。