二路归并排序

来源:互联网 发布:沈阳市大数据运营公司 编辑:程序博客网 时间:2024/05/02 11:50

         二路归并排序是将两个有序表合并成一个有序表的排序方法。

       其基本思想为:序列中有n个记录,可以看作为n个有序子序列,每个序列长度为1。首先将每相邻的两个记录合并,得到n/2个较大的有序子序列,每个序列长度为2。再将上述子序列两两合并,得到┌┌n/2/2个有序子序列,直至得到一个长度为n的有序序列为止,排序结束。

二楼归并排序的算法如下:

void Merge(List a,List R,int h,int m,int n){k=h;j=m+1;while((h<=m)&&(j<n)){if(a[h].key<=a[j].key){R[k]=a[h];h++;}else{R[k]=a[j];j++;}k++;}while (h<=m){R[k]=a[h];h++;k++;}while (j<=n){R[k]=a[j];j++;k++;}}
void MergePass(List a,List b,int h){i=1;while(i<n-2*h+1){merge(a,b,i,i+h-1,i+2*h-1);i+=2*h;}if(i+h-1<n)merge(a,b,i,i+h-1,n);elsefor(t=i;t<=n;t++)b[t]=a[t];}
void MergeSort(List a,int n){m=1;while(m<n){MergePass(a,b,n,m);m=2*m;MergePass(b,a,n,m);m=2*m;}}




       归并排序算法的时间复杂度为O(nlog2n),当n较大时,归并排序的时间性能优于堆排序,但是它所需的存储量较多。

0 0
原创粉丝点击