You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自行实现的C++ Quicksort快速排序无法排序输入数组,该如何解决?

代码问题排查及修复

你的代码存在两处核心的参数传递错误,是导致排序失效的直接原因:

  • 自定义swap函数为值传递:当前实现的void swap(int a, int b)是值传递逻辑,函数内部交换的只是形参的临时副本,调用时传入的实参不会发生任何实际交换,需要将参数改为引用类型才能生效。
  • qsort函数的vector参数为值传递:void qsort(vector <int> a, int first, int last)同样是值传递逻辑,每次调用qsort都会复制一份独立的vector副本,所有排序操作都作用在副本上,main函数中的原数组始终没有被修改,需要改为引用传递。

修正后完整可运行代码

#include <iostream>
#include <vector>

using namespace std;

// 改为引用传参实现实际交换
void swap(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

// vector改为引用传参,直接修改原数组
void qsort(vector <int>& a, int first, int last)
{
    int f = first, l = last;
    int mid = a[(f + l) / 2];
     
    do {
        while (a[f] < mid) {
            f++;
        }
        while (a[l] > mid) {
            l--;
        }

        if (f <= l) {
            swap(a[f], a[l]);
            f++;
            l--;
        }
    } while (f < l);

    if (first < l) {
        qsort(a, first, l);
    }
    if (f < last) {
        qsort(a, f, last);
    }
}

int main()
{
    int n;
    cin >> n;
    vector <int> a;
    a.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    qsort(a, 0, n - 1);

    for (int i = 0; i < n; i++) {
        cout << a[i] << ' ';
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者Kritiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:06:03