参考:
基本思想:分治
分解(Divide):将n个元素分成个含n/2个元素的子序列。
解决(Conquer):用合并排序法对两个子序列递归的排序。
合并(Combine):合并两个已排序的子序列已得到排序结果。
一个例子:
实现:
mergesort(seq):
1.输入seq为需要排序的数组。
2.在mergesort函数中:
<1>如果输入seq只有一个元素,直接返回seq。
<2>如果len(seq)>0,将seq分为左右两部分,并分别调用mergesort函数。
<3>对左右两部分mergesort调用结果进行merge。
merge(left,right):
1.初始化一个res,为空。
2.定义两个针对left和right的下标i j ,初始化为0。
3.不断比较left[i]与right[j],将值较小的添加到res,同时下标后移,直到left或right为空。
4.将非空的left或right剩余部分直接添加到res中。
def mergesort(seq): if len(seq)<=1: return seq mid = len(seq)//2 left = mergesort(seq[0:mid]) right = mergesort(seq[mid:]) return merge(left,right) def merge(left,right): res = [] i = 0 j = 0 while i < len(left) and j < len(right): if left[i]<=right[j]: res.append(left[i]) i = i+1 else: res.append(right[j]) j= j +1 res+=left[i:] res+=right[j:] return res