C++快速排序
前两天面试过程中弱智了连快排没写出来,这里简单做一下个人向记录。
只需要挑选出枢轴以后简单左右比较,匹配即可,最后记得把枢轴调整到中间。
基础算法还是要掌握熟练的,对于跳出/边界/顺序等特殊情况最好在脑海中有一个大概的模拟。
# include<iostream>
# include<vector>
# include<algorithm>
using namespace std;
void quickSort(vector<int>& vec, int left_edge, int right_edge) {
if (left_edge >= right_edge) {
return;
}
int pivot = vec[left_edge];
int left_pos = left_edge;
int right_pos = right_edge;
while (left_pos < right_pos) {
for (; left_pos < right_pos; right_pos--) {
if (vec[right_pos] < pivot) {
break;
}
}
for (; left_pos < right_pos; left_pos++) {
if (vec[left_pos] > pivot) {
break;
}
}
if (left_pos < right_pos) {
swap(vec[left_pos], vec[right_pos]);
}
}
swap(vec[left_edge], vec[right_pos]);
quickSort(vec, left_edge, right_pos-1);
quickSort(vec, right_pos + 1, right_edge);
return;
}
int main() {
vector<int> test = { 3, 2, 5, 4, 1 ,7,4,21,6,3,51,2,111,7};
quickSort(test, 0, test.size()-1);
for (auto it : test) {
cout << it << " " << endl;
}
return 0;
}