您的位置:首页 > 编程语言 > Python开发

python二路归并排序实现法

2015-08-16 14:39 711 查看
归并原理:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

归并过程:

比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

python代码:

def MergeSort(lists):
if len(lists) <=1:
return lists
num = len(lists)/2
left = MergeSort(lists[:num])
right = MergeSort(lists[num:])
return Merge(left,right)

def Merge(left,right):
r,l=0,0
reslut=[]
while l<len(left) and r<len(right):
if left[l] < right[r]:
reslut.append(left[l])
l+=1
else:
reslut.append(right[r])
r+=1
reslut+= right[r:]
reslut+= left[l:]
return reslut

if __name__ == '__main__':
arr = [4,2,15,4,6,7,1]
print MergeSort(arr)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: