归并排序
归并排序是采用分治算法的典型应用。
归并排序就是讲无序队列拆分为两个小组,组内的元素先进行排序,然后组间的元素逐个比较,把小的元素依次放在新的队列中,直到队列全部有序。
归并排序的最优时间复杂度为O(nlogn),递归的时间复杂度为O(logn),最坏时间复杂度为O(nlong)
# 分组函数 def guibingsort(alist): n=len(alist) if n==0 or n==1: return alist num=n//2 # 进行分组 left=alist[:num] right=alist[num:] le=guibingsort(left) ri=guibingsort(right) return merge(le,ri) # 比较函数 def merge(le,ri): result=[] if len(le)>0 and len(ri)>0: if le[0]<=ri[0]: result.append(le.pop(0)) else: result.append(ri.pop(0)) result+=le result+=ri return result if __name__ == '__main__': alist=[2,32,21,54,65,21,1] print(guibingsort(alist))