现在的位置: 首页 > 综合 > 正文

我对快速排序的理解。

2013年04月26日 ⁄ 综合 ⁄ 共 755字 ⁄ 字号 评论关闭
#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;只是写的自己的理解,可能不对……

抱歉!评论已关闭.