快速排序的原理是非常明显的,但是这个算法细节特别多。
快排主程序,基本上都是这样的:
void quick_sort(vector<int> &num, int first, int last) {
if (first >= last) {
return;
}
else {
int index = partition(num, first, last);
quick_sort(num, first, index - 1);
quick_sort(num, index + 1, last);
}
}
patition函数,这个函数有许多版本了,我的版本:int partition(vector<int> &num, int first, int last) {
int p = first; int pivot = num[first];
while (first <= last) { // 细节1
if (num[first] <= pivot) {
++first;
}
else if (num[last] >= pivot) {
--last;
}
else {
swap(num[first], num[last]); // #include<algorithm>。细节: 不用++first, --last
}
}
num[p] = num[last];
num[last] = pivot;
return last;
}