归并排序指的是将数据进行整合,重新分配一个空间出来,将空间分成两个部分,对每一个部分的数据从头到尾进行比较。每次比较的是两个值大小,谁小谁放在原始空间的位置,然后移出的值的序列号进行增加1的操作,继续下一个的比较。具体的方法如下
void __merge(T arr[], int l, int mid, int r){
// 经测试,传递aux数组的性能效果并不好
int aux[r-l+1];
for( int i = l ; i <= r; i ++ )
aux[i-l] = arr[i];
int i=1,j=mid+1;
for(int k=1;k<=r;k++){
if(i>mid) {arr[k]=aux[j-1];j++;}
else if(j>r) {arr[k]=aux[i-1];i++}
else if(aux[i-1]<aux[j-1]) {arr[k]=aux[i-1];j++;}
else {arr[k]=aux[j-1];j++;}
}
}
void __mergesort(int arr[],int l,int r){
if(l>=r)
return;
int mid=(l+r)/2;
__mergesort(arr,1,mid);
__mergesort(arr,mid+1,r);
__merge(arr,1,mid,r);
}
void mergesort(int arr[],int n){
__mergesort(arr,0,n-1);
}
int main(){
int a[10]={10,9,8,7,6,5,4,3,2,1};
mergesort(a,10);
for(int i=0;i<10;i++){
count<<a[i]<<"";
}
count<<endl;
return 0;
}
算法稍微复杂些,需要每天仔细的反复观察才可以的