您的位置:首页 > 其它

排序——归并排序

2016-02-17 12:38 232 查看
排序——选择排序

排序——冒泡排序及其改进版本

归并排序由冯诺依曼于 1945 年发明;

采用二分的思想,对一个无序数列的最终排序,我们需要首先定义对两个已排序序列的合并算法:

def merge(l1, l2):
l3 = []
i, j = 0, 0
n1, n2 = len(l1), len(l2)
while i < n1 and j < n2:
if l1[i] <= l2[j]:
l3.append(l1[i])
i += 1
else:
l3.append(l2[j])
j += 1
if i < j:
l3.extend(l1[i:])
else:
l3.extend(l2[j:])
return l3


采用递归二分的思想,进行最终的归并排序:

def merge_sort(l):
n = len(l)
if n < 2:
return l
m = n//2
l1 = merge_sort(l[:m])
l2 = merge_sort(l[m:])
return merge(l1, l2)


算法时间复杂度分析:

t(n)===2t(n/2)+n2(2t(n/2)+n/2)+nnlogn+n

最终的时间复杂度为:O(nlogn)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: