是基准数的问题吗?我基准数设在右边,二分后与中间数交换
#include<iostream>
#include<vector>
using namespace std;
int partition(vector<int> &a, int left, int right) {
int pivot1 = left - 1;
for (int i = left; i <= right - 1; i++) {
if (a[i] < a[right]) {
pivot1++;
swap(a[i], a[pivot1]);
}
}
swap(a[pivot1 + 1], a[right]);
return pivot1 + 1;
}
void quicksort(vector<int> &a, int left, int right) {
if (left < right) {
int pivot_index = partition(a, left, right);
quicksort(a, left, pivot_index - 1);
quicksort(a, pivot_index + 1, right);
}
}
int main() {
int n;
cin >> n;
vector<int> a;
for (int i = 0; i <= n - 1; i++) {
int x;
cin >> x;
a.push_back(x);
}
quicksort(a, 0, n - 1);
for (int i = 0; i <= n - 1; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}