#include<iostream>
#include<vector>
using namespace std;
int quickSortPart(vector<int>& vec, int l, int r) {
int x = vec[l]; //选定左一为中间数
int index = l;
int flag = 1;
int in = 0;
int i = l;
int j = r;
if (l < r) {
while (i < j) {
if ((flag *= (-1)) == 1) {
while (i < j && vec[i] < x) i++; //从左开始寻找比中间数大的数
in = i;
}
else {
while (i < j && vec[j] > x) j--; //从右开始寻找比中间数小的数
in = j;
}
if (i < j) {
vec[index] = vec[in];
index = in;
}
}
vec[i] = x;
if (i - 1 > 0) quickSortPart(vec, l, i - 1);
if (j + 1 < vec.size() - 1) quickSortPart(vec, j + 1, r);
}
return i;
}
template<typename T>
void coutVec(vector<T> vec) {
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
}
int main()
{
vector<int> a = { 5, 3, 2, 6, 8, 7, 1, 9, 0 };
coutVec<int>(a);
int num = quickSortPart(a, 0, a.size() - 1);
coutVec<int>(a);
cout << num << endl;
return 0;
}
快速排序算法C++
最新推荐文章于 2024-07-25 15:15:22 发布