因爲這個題去學了這歸併排序和快排,真的神奇,尤其是歸併排序的代碼,有一種美感呢。
放一個歸併排序學習的地方 https://www.cnblogs.com/chengxiao/p/6194356.html
//歸併排序
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int a[maxn];//從小到大
#define swap(x,y) x=x^y,y=x^y,x=x^y;
int* merg(int arr1[],int l,int mod,int r)
{
int i=l,j=mod+1,k=0;
int* arr2=(int*)malloc(sizeof(int)*(r-l+1));
while(i<=mod&&j<=r){
if(arr1[i]<=arr1[j]) arr2[k++]=arr1[i++];
else arr2[k++]=arr1[j++];
}
while(i<=mod){
arr2[k++]=arr1[i++];
}
while(j<=r){
arr2[k++]=arr1[j++];
}
for(i=0,j=l;i<r-l+1;i++){
arr1[j++]=arr2[i];
}
free(arr2);
}
void mergesort(int a[],int l,int r)
{
if(l<r){
int mod=(l+r)>>1;
mergesort(a,l,mod);
mergesort(a,mod+1,r);
merg(a,l,mod,r);
}
}
int main()
{
int n,i,j,k;
cin >> n;
int sum=0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
mergesort(a,0,n-1);
for(i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1) printf(" ");
else printf("\n");
}
return 0;
}