#include <stdio.h>
#include <stdlib.h>
int a[100000];
void f(int l,int r,int a[])
{
int i=l,j=r,x=a[i];
if(l>=r)
return ;
while(i<j)
{//易错点:① x取的是最左边的,所以要从最右边先开始。② a[j]>=x和a[i]<=x;至少有一个=。
while(i<j&&a[j]>=x)
j--;
a[i]=a[j];
while(i<j&&a[i]<=x)
i++;
a[j]=a[i];
}
a[i]=x;
f(l,i-1,a);
f(i+1,r,a);
}
int main()
{
int n,i;
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
scanf("%d",&a[i]);
f(0,n-1,a);
for(i=0; i<n-1; i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
return 0;
}
【快排】数据结构实验之排序八:快速排序
最新推荐文章于 2022-03-12 18:01:40 发布