合并排序(c++)
#include<iostream>
using namespace std;
void Merge(int *a,int low,int mid,int high){
int *b=new int[high-low+1];
int i=low,j=mid+1,k=0;
while(i<=mid&&j<=high){
if (a[i]<=a[j]){
b[k++]=a[i++];
}else{
b[k++]=a[j++];
}
}
while(i<=mid){
b[k++]=a[i++];
}
while(j<=high){
b[k++]=a[j++];
}
for(i=low,k=0;i<=high;){
a[i++]=b[k++];
}
delete[] b;
}
void MergeSort(int *a,int low,int high){
if(low<high){
int mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
}
}
int main(){
int n;
cin>>n;
int *a=new int[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
MergeSort(a,0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}