分析:
此题说是用快排,但是只要是nlog2(n)的算法都可以过,我比较菜,nlog2
(2)的算法只会归并排序,所以我就用归并写了。
//归并排序
#include<stdio.h>
#define ARRLen 200000
void sort(int a[],int begin,int mid,int end)
{
int result[ARRLen];
int i=begin;
int j=mid+1;
int k=0;
while(i<=mid&&j<=end)
{
if(a[i]<a[j]){result[k++]=a[i++];}
else {result[k++]=a[j++];}
}
if(j==end+1)
while(i<=mid){result[k++]=a[i++];}
if(i==mid+1)
while(j<=end){result[k++]=a[j++];}
for(int m=0,s=begin;m<k;m++,s++)
{
a[s]=result[m];
}
}
void margesort(int a[],int begin,int end)
{
if(begin>=end) return;
int mid=(begin+end)/2;
margesort(a,begin,mid);
margesort(a,mid+1,end);
sort(a,begin,mid,end);
}
void Printlist(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
main()
{
int a[ARRLen];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",a+i);
}
margesort(a,0,n-1);
Printlist(a,n);
}