📄 quicksort.cpp
字号:
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
/*!Begin Snippet*/
template <class T>
void quick_sort(vector<T>& v, int low, int high) {
// Do not solve recursively when faced with
// only 1 or 2 elements
if (low == high) {
return ;
}
else if (low + 1 == high) {
if (v[low] > v[high]) {
swap(v[low], v[high]);
return ;
}
}
// select pivot
int middle = (low + high) / 2;
T pivot = v[middle];
swap(v[middle], v[high]);
// partition
int i;
int j;
for (i = low, j = high - 1; ;) {
while (v[i] < pivot && i < j) i++;
while (pivot < v[j] && i < j) j--;
if (i < j) {
swap(v[i], v[j]);
}
else {
break;
}
}
// place pivot in correct location
if (i != high - 1 && j != high - 1) {
swap( v[i], v[high]);
}
// quicksort sub-vectors
if (i == low && j == low) {
quick_sort(v, low + 1, high);
}
else if (i == high - 1 && j == high - 1) {
quick_sort(v, low, high - 1);
}
else {
quick_sort(v, low, i - 1);
quick_sort(v, i + 1, high);
}
}
/*!End Snippet*/
int main(int argc, char* argv[]) {
vector<int> v;
v.push_back(3);
v.push_back(1);
v.push_back(43);
v.push_back(33);
v.push_back(23);
v.push_back(74);
v.push_back(11);
v.push_back(53);
v.push_back(22);
v.push_back(64);
quick_sort(v, 0, v.size() - 1);
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
return EXIT_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -