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]