归并排序建议写法
·
#include<bits/stdc++.h>
using namespace std;
#define maxn 500
int arr[maxn],help[maxn];
void merge(int l,int m,int r){
int i=l;
int a=l,b=m+1;
while(a<=m&&b<=r){
help[i++]=arr[a]<arr[b]?arr[a++]:arr[b++];
}
while(a<=m){
help[i++]=arr[a++];
}
while(b<=r){
help[i++]=arr[b++];
}
for(int j=l;j<=r;j++){
arr[j]=help[j];
}
}
void mergesort(int l,int r){
if(l==r) return;
int m=(l+r)>>1;
mergesort(l,m);
mergesort(m+1,r);
merge(l,m,r);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
mergesort(1,n);
for(int i=1;i<=n;i++){
cout<<arr[i]<<" ";
}
return 0;
}
更多推荐
所有评论(0)