#include <bits/stdc++.h>
using namespace std;
void quicksort(vector<int>& v,int left,int right) {
if (left >= right)
return;
int pivot = v[left];
int i = left, j = right;
while (i < j) {
while (i < j && v[j] >= pivot)//必须要有等号 否则v[i]=v[j]=pivot时可能死循环
j--;
v[i] = v[j];//i=j时相当于不变
while (i < j && v[i] <= pivot)
i++;
v[j] = v[i];
}
v[i] = pivot;
quicksort(v, left, i - 1);
quicksort(v, i + 1, right);
}
void quicksort(vector<int>& v) {
quicksort(v, 0, v.size() - 1);
}//放在被调用函数之后
int main() {
vector<int> v = { 5,1,3,9,7,3,2 };
int n = v.size();
quicksort(v);
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
return 0;
}
循环的另一种写法
while (i < j) {
while (i < j && v[j] > pivot)
j--;
if (i < j)
v[i++] = v[j];
while (i < j && v[i] < pivot)
i++;
if (i < j)
v[j--] = v[i];
}