快速排序的基本思想是:通过一趟排序将待记录分割成独立的两部分,其中一部分就的关键字均比另一部分的关键字小,则可分别对这两部分就继续进行排序,以达到整个序列有序。
快速排序是工程代码中用的最多的,使用的分治思想,
快速排序在这几个O(N*logN)的算法中也是效率最高的。
关键点在于 == 递归(分治) + 快慢指针 ==
实现代码:
class Solution {
public:
void quickSort(vector<int>& nums, int begin, int end) {
if(begin >= end) return; //terminator
int pivot = partition(nums, begin, end); //process current layer
quickSort(nums, begin, pivot - 1); //drill down
quickSort(nums, pivot + 1, end);
}
int partition(vector<int>& nums, int begin, int end) {
int counter = begin;
int pivot = end;
for(int i = begin; i < end; ++i) {
if(nums[i] < nums[pivot]) {
swap(nums[i], nums[counter++]); //快慢指针
}
}
swap(nums[counter], nums[pivot]);
return counter;
}
};