之前听说很多同学网上搜的基本只有思想上的参考,没有完整的code,现在附上代码,希望有助于大家更深刻的理解归并思想。
#include <iostream>
using namespace std;
//首先处理合并两个数列a[first...mid]和a[mid+1...end]
void mergesort_array(int a[],int begin,int end){
//创建一个新的数组空间来合并
int *temp = new int[end-begin+1];
int mid = begin + (end-begin)/2;
int i = begin,j = mid+1,k=0;
while(i <= mid && j <= end){
if(a[i]>a[j]){
temp[k++] = a[j++];
}
else temp[k++] = a[i++];
}
while(i <= mid){
temp[k++] = a[i++];
}
while(j <= end){
temp[k++] = a[j++];
}
for(int i = 0;i < k;i++){
a[i+begin] = temp[i];
}
//回收空间
delete []temp;
}
//归并思想
void mergesort(int a[],int begin,int end){
if(begin < end){
int mid = begin + (end - begin)/2;
mergesort(a,begin,mid);
mergesort(a,mid+1,end);
mergesort_array(a,begin,end);
}
}
int a[1001];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
mergesort(a,0,n-1);
for(int i=0;i<n-1;i++){
cout<<a[i]<<' ';
}
cout<<a[n-1]<<endl;
return 0;
}