自行实现的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
相关产品推荐
相关产品推荐

