快速排序


快速排序: 首先找一个基准数: (参照的数,一般是第一个);
例如:6 1 2 7 9 3 4 5 10 8
算法过程:先从右往左找一个小于 6 的书,然后交换他们,可以用变量i,j分别指向序列的最左最又。

修改过程回去看一下算法导论吧
代码如下:

int Partition(int l,int r,vector<int> &a)
{
    int temp = a[l];
    int i=l,j=r;
    while(i<j)
    {
        //顺序很重要,先从右往左找:因为最后的过程是跟最左转换此时i= j
        while(a[j] >= temp && i<j)
            j--;
        //再从左往右找
        while(a[i] <= temp && i<j)
            i++;
        //交换两个数的位置
        if(i < j)
        {
            int t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
        //最终将基准位归位

    }
     a[l] = a[i];
     a[i] = temp;
    return i;
}

void quickSort(int l,int r,vector<int> &a)
{
    if(l < r)
    {
        int d = Partition(l,r,a);
        quickSort(l,d-1,a);
        quickSort(d+1,r,a);//运用递归写
    }

}

亲测有效吧,可能要修改。>_<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值