码迷,mamicode.com
首页 > 其他好文 > 详细

归并排序

时间:2014-07-16 00:56:42      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   数据   算法   

算法思想:

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

算法实现:

 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 = p
10     j = mid
11     k = 0
12    
13     while i<mid and j <= r 
14     do
15         if A[i] <= A[j] then
16             A[k++] = A[i++]
17         else
18             A[k++] = A[j++]
19 
20     while i < mid 
21     do
22         A[k++] = A[i++]
23 
24     while j <= r 
25     do
26         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 )

归并排序,布布扣,bubuko.com

归并排序

标签:style   blog   color   使用   数据   算法   

原文地址:http://www.cnblogs.com/stormli/p/merge_sort.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!