快速排序代码

其中有一些j,j+1可以换成i,但会有边界问题,也就是前面也要改,边界问题很麻烦,这个东西不涉及算法逻辑但又不得不处理还难处理,我的想法是背一下,照个这个思路写,虽然我不喜欢背,但这种边界问题还是背一下好。
输入 :
5
4 7 9 2 4
#include <iostream>
using namespace std;

int q[1024];

void quick_sort(int l, int r) {
    if (l >= r)
        return;

    // 选择 第一个数 作为比大小的数
    int x = q[l];

    // l r 需要保持不动,这里拿i和j接一下
    // 不用担心范围扩大了会越界,i和j在下面循环中会先补回来
    int i = l - 1;
    int j = r + 1;

    while (true) {
        while (q[++i] < x);
        while (q[--j] > x);
        if (i < j) {
            swap(q[i], q[j]);
        } else
            break;
    }

    quick_sort(l, j);
    quick_sort(j + 1, r);
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> q[i];
    }

    quick_sort(0, n-1);

    for (int i = 0; i < n; i++) {
        cout << q[i] << " ";
    }
    cout << endl;
    return 0;              
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值