参考视频:https://www.bilibili.com/video/BV1K44y1k79z
具体原理看上面链接里面的视频就够了,下面简单讲一下快排和附上c++代码:
对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n²)的排序算法。
虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能很好,它的期望时间复杂度为O(nlgn),而且O(nlgn)中隐含的常数因子非常小。
//快速排序
void fastsort(vector<int>& nums, int left, int right) {
if (left >= right)return;
int q = partition(nums, left, right);
fastsort(nums, left, q - 1);
fastsort(nums, q + 1, right);
}
int partition(vector<int>& nums, int left, int right) {
int i = left;
for (int j = left; j <= right - 1; j++)
if (nums[j] <= nums[right])
swap(nums[i++], nums[j]);
swap(nums[i], nums[right]);
return i;
}