参考博客
简要介绍
一种不稳定排序,采用分治的策略,是对冒泡排序的一种改进。时间复杂度O(n log2n),空间复杂度O(log2n)。
基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序。
实现思路
挖坑法:设置两个变量start=0,end=size-1,选择一个基准值key(如果选择第一个元素arr[start]作为基准值,key保存了arr[start]的副本,start位置就成了坑)。从end开始向前搜索,找到第一个小于key的值x,将x放入arr[start]中(end位置就成了坑),从start开始向后搜索,找到第一个大于key的值y,将y放入arr[end]中(start位置就成了坑),重复以上两步直到start==end,将key放入坑中,这时一次快排完成实现部分有序,接下来递归调用就行了。
填坑的规则就是左边有坑就从右边取值,右边有坑就从左边取值
代码实现
void QuickSort(int arr[], int left, int right){
int l = left;
int r = right;
int key = arr[left];
if (l >= r)
return;
while (l < r){
while (arr[r] > key && l < r)
--r;
if (l < r){
arr[l] = arr[r];
++l;
}
while (arr[l] < key && l < r)
++l;
if (l < r){
arr[r] = arr[l];
--r;
}
if (l == r)
arr[l] = key;
}
QuickSort(arr, left, l - 1);
QuickSort(arr, l + 1, right);
}