快排

快排是目前最快的排序方法(我知道的)。之前就学过,但没怎么总结,这里写一个总结。
自我感觉快排利用了类似二分的方法,把一个大区间先解决整体的排序,细节的排序先不管,然后把这个大区间分为2个小区间,用同样的方法解决这个区间的大问题,再分小区间来解决小问题。
举个例子模拟一下过程吧。
5 9 6 4 8
首先把这5个数存起来,存入数组,看成一个区间,左边界下标为1,右边界下标为5,然后以第一个数作为这个区间的基始点5,先从右到左找到一个小于这个基始点的数(从左边找的下标要小于从右找的坐标,即i

void qsort(int l,int r)
{
    int i,j,t,temp;
    if(l>=r)
    return;
    i=l;
    j=r;
    temp=a[l];
    while(i!=j)
    {
        while(a[j]>=temp&&i<j)
        j--;
        while(a[i]<=temp&&i<j)
        i++;
//      printf("i=%d b[i]=%d j=%d b[j]=%d\n",i,a[i],j,a[j]); 
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
        for(int i=0;i<n;i++)
        {
            printf("%d ",a[i]);
        }
        printf("\n");
    }
//  printf("i=%d l=%d b[i]=%d b[l]=%d\n\n",i,l,a[i],a[l]);
    a[l]=a[i];
    a[i]=temp;
    qsort(l,i-1);
    qsort(i+1,r);  
}

算法不算难,多模拟几次就好了,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值