归并排序是一种很不错的排序方法,速度比较快,而且比较稳定。所以想研究一下,就瞎写了一个。
思想还是很容易理解的:
先分到底,然后在合的时候排序
这样就是最后排序之后的数组
#include<stdio.h>
int n;
int num[20005];
int tmp[20005];
void mysort(int l,int r)
{
if(l>=r)return;
int mid=(l+r)>>1;
mysort(l,mid);
mysort(mid+1,r);
int pos=0;
int i,j;
for(i=l,j=mid+1;i<=mid&&j<=r;)
{
if(num[i]<num[j])tmp[++pos]=num[i],i++;
else tmp[++pos]=num[j],j++;
}
if(i!=mid+1)for(;i<=mid;i++)tmp[++pos]=num[i];
else if(j!=r+1)for(;j<=r;j++)tmp[++pos]=num[j];
for(i=l;i<=r;i++)num[i]=tmp[i-l+1];
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)scanf("%d",&num[i]);
mysort(1,n);
for(int i=1;i<=n;i++)printf("%d%c",num[i],i==n?'\n':' ');
}
}