#include<iostream>
#include<vector>
using namespace std;
void quicksort(vector<int> &nums ,int left, int right) {
if (left > right) {
return;
}
int i = left, j = right, key = nums[left]; //key中存的是基准数
while (i < j) {
while (i < j && nums[j] >= key) {
j--; //从右向左找第一个小于key的数,必须先从右边开始。
}
while (i < j && nums[i] <= key) {
i++; //从左向右找第一个大于等于key的数
}
if (i < j) {
int t = nums[i];
nums[i] = nums[j]; //交换两个数在数组中的位置
nums[j] = t;
}
}
nums[left] = nums[i];
nums[i] = key;
quicksort(nums ,left,i-1); //继续处理左边的,这里是一个递归的过程
quicksort(nums, i + 1, right); //继续处理右边的 ,这里是一个递归的过程
}
int main(){
vector<int> arr = { 6,1,2,7,8,9,18,1,9,2,3,4,5,3,10,8 };
for (int i = 0; i < arr.size(); i++) {
cout<<arr[i]<<endl;
}
int n = arr.size()-1;
quicksort(arr,0,n);
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << endl;
}
return 0;
}
输出结果
6
1
2
7
8
9
18
1
9
2
3
4
5
3
10
8
1
1
2
2
3
3
4
5
6
7
8
8
9
9
10
18