#include<stdio.h>
void quick_sort(int s[],int l,int r)
{
if(l<r)//判断条件为左边应该小于右边再进行排序;
{
int i=l,j=r,x=s[l];
while(i<j)//i<j的结束条件是i==j,这样可以确保i的左边都比s[i]小;
{
while(i<j && s[j]>=x)//找出左边比X小的数,如果小于X就停止
j--;
if(i<j)
s[i++]=s[j];//把找到的值赋给X所在的位置的数,此时i>j,所以会跳出大循环,直接进行s[i]=x的赋值;
while(i<j && s[i]<x)//当保证所有的右值都比X大的时候开始比较左值;
i++;
if(i<j)//比较左值与右值差不多,如果出现小于的情况就进行赋值,跳出大循环,进行s[i]=x,的赋值;
s[j--]=s[i];
}
s[i]=x;//每次大循环结束可以确定X所在的位置,X将一串数字分成两部分,除了X的位置是正确的之外其他的数的位置是不确定的,所以递推调用自己,求下一个数,一直到还剩一个数为止;
quick_sort(s,l,i - 1);
quick_sort(s,i+1,r);
}
}
int main()
{
int a[100000],i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quick_sort(a,0,n-1);
for(i=n-1;i>0;i--)
printf("%d ",a[i]);
printf("%d\n",a[0]);
return 0;
}
这是以找女朋友为例写的快速排序,连接http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2109&cid=1141;只是写的自己的理解,可能不对……