c++快排&获取第k大个数
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
/*
* 获取第k大个数
*/
int getK(vector<int> v, int left, int right, int k) {
if (left >= right) return v[k];
int key = v[left];
int i = left;
int j = right;
while (i < j) {
while (v[j] >= key && i < j) j--;
while (v[i] <= key && i < j) i++;
swap(v[i], v[j]);
}
swap(v[i], v[left]);
if (k <= i) {
return getK(v, left, i, k);
}
else {
return getK(v, i + 1, right, k);
}
}
void quickSort(vector<int>&v, int left, int right) {
if (left >= right) {
return;
}
int key = v[left];
int i = left;
int j = right;
while (i < j) {
while (v[j] >= key && i < j)j--;
while (v[i] <= key && i < j)i++;
swap(v[i], v[j]);
}
swap(v[i], v[left]);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
quickSort(v, left, i - 1);
quickSort(v, i + 1, right);
}
int main() {
vector<int> v{ 4,2,6,8,10,24,45};
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
quickSort(v, 0, v.size() - 1);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
}