排序之歸並排序
阿新 • • 發佈:2017-05-26
處理 cor delet 數據 sort img str 內存 amp
歸並排序在外排序和內排序的作用都是非常大的,本人覺得要是要用戶外排。在處理大數據排序,當內存大小不足以把所有數據一次載入時,這時就需要歸並排序。以下進行的是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 }
排序之歸並排序