利用快速排序算法将读入的 NN 个数从小到大排序后输出,请勿使用
std::sort
。输入格式
第一行一个整数 n (1≤n≤105)n (1≤n≤105)。
第二行 nn 个整数 ai (1≤ai≤109)ai (1≤ai≤109)。
输出格式
输出一行,为 aiai 排序后的结果。
Sample Input
5 4 7 1 4 6
Sample Output
1 4 4 6 7
思路:阿久是参考《啊哈!算法》上的
实现代码:
#include<stdio.h>
int a[100010];
void quicksort(int l,int r)
{
int i,j,t,temp;
if(l>r)
return;
temp=a[l]; //基准数
i=l;
j=r;
while(i!=j)
{
//要先从右边开始找!!
while(a[j]>=temp && i<j)
j--;
while(a[i]<=temp && i<j)
i++;
//交换两个数在数组中的位置
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最终将基准数归位
a[l]=a[i];
a[i]=temp;
quicksort(l,i-1);
quicksort(i+1,r);
}
int main()/*阅读代码从这里开始,养成良好习惯哈*( ̄▽ ̄)~*/
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quicksort(0,n-1);/*把我输入的数在函数里面排一下*/
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}