首页 > 代码库 > 归并排序

归并排序

算法思想:

分治法,将一个序列分为两部分,分别排序,然后合并已排序序列。

算法实现:

 1 MERGE_SORT(A,p,r) 2     mid = (p+r)/2 3     MERGE_SORT(A,p,mid) 4     MERGE_SORT(A,mid,r) 5     MERGE(A,p,mid,r) 6  7 MERGE(A,p,mid,r) 8     create array A[r-p+1] 9     i = p10     j = mid11     k = 012    13     while i<mid and j <= r 14     do15         if A[i] <= A[j] then16             A[k++] = A[i++]17         else18             A[k++] = A[j++]19 20     while i < mid 21     do22         A[k++] = A[i++]23 24     while j <= r 25     do26         A[k++] = A[j++]27 28     copy array from A to A

 

算法复杂度:

平均:O(nlgn)

最差:O(nlgn)

最优:O(nlgn)

空间复杂度:O(n)

 

使用场景:

归并排序由于有比较优的时间复杂度,并且具有排序稳定性(相同key值元素不改变位置),因此一般用在要求稳定性的大规模数据排序中。

 

STL实现:

stl的stable_sort内部采用了归并算法实现,在有足够归并空间时,其复杂度为O(nlgn),但当空间不足时,其复杂度为O(n lgn lgn )