对n个数用归并排序

#include<iostream>
using namespace std;
void merge(int a[],int s,int m,int e,int tmp[])//s为开始m为中间e为末尾tmp为额外存储空间 
{ int pb=0;int p1=s;int p2=m+1;
while(p1<=m&&p2<=e)
{ if(a[p1]>a[p2])
tmp[pb++]=a[p1++];
else 
tmp[pb++]=a[p2++];}
while(p1<=m)
tmp[pb++]=a[p1++];
while(p2<=e)
tmp[pb++]=a[p2++];
for(int i=0;i<e-s+1;i++)
a[s+i]=tmp[i];
    
}

void mergesort(int a[],int s,int e,int tmp[])
{ if(s<e)
{ int m=s+(e-s)/2;
mergesort(a,s,m,tmp);
mergesort(a,m+1,e,tmp);
merge(a,s,m,e,tmp);
    
}
    
}
int main(){
void merge(int a[],int s,int m,int e,int tmp[]);
void mergesort(int a[],int s,int e,int tmp[]);
int i,n;
cin>>n;
int a[n];int b[n];
for(i=0;i<n;i++)
cin>>a[i];
mergesort(a,0,n-1,b);
for(i=0;i<n;i++)    
cout<<a[i]<<" ";
return 0;

猜你喜欢

转载自blog.csdn.net/qq_41479464/article/details/82735115