标签:排序 技术分享 while 用户 [] pre merge 外排序 mergesort
归并排序在外排序和内排序的作用都是非常大的,本人觉得要是要用户外排。在处理大数据排序,当内存大小不足以把所有数据一次载入时,这时就需要归并排序。以下进行的是2路归并排序为主。
数组递归归并
1 void mergeCore(int *src,int * &dest,int i,int m,int n){ 2 int k=0,j=0; 3 int begin=i; 4 for(k=i,j=m+1;k<=m&&j<=n;k++){ 5 if(src[i]<src[j]) 6 dest[k]=src[i++]; 7 else 8 dest[k]=src[j++]; 9 } 10 while(i<=m){ 11 dest[k++]=src[i++]; 12 } 13 while(j<=n){ 14 dest[k++]=src[j++]; 15 } 16 while(begin<=n){ 17 src[begin]=dest[begin]; 18 begin++; 19 } 20 } 21 void mergeCall(int *src,int * &dest,int s,int t){ 22 if(s==t) 23 dest[s]=src[s]; 24 else{ 25 int m=(s+t)/2; 26 mergeCall(src,dest,s,m); 27 mergeCall(src,dest,m+1,t); 28 mergeCore(src,dest,s,m,t); 29 } 30 } 31 void mergeSort(int *a,int n){ 32 int *dest= new int[n]; 33 mergeCall(a,dest,0,n-1); 34 delete [] dest; 35 }
标签:排序 技术分享 while 用户 [] pre merge 外排序 mergesort
原文地址:http://www.cnblogs.com/zhangyuhang3/p/6909896.html