原理
将数组中所有元素都跟一个基准元素x比(随意选取,常取第一个或最后一个),比x小的划分成左边一块,比x大的划分成右边一块,得到两个子问题。然后递归处理这两个子问题即可。
平均时间复杂度:O(nlog2n)
空间复杂度:O(n)
稳定性:不稳定
C++实现
从小到大
void QuickSort(int array[], int start, int last)
{
int i = start;
int j = last;
int temp = array[i];
if (i < j)
{
while (i < j)
{
//找到第一个小于基准的数
while (i < j && array[j]>=temp )
j--;
if (i < j)
{ //array[i]已通过temp保存,可作为临时存放载体,把小于基准数的值放在基准数左边
array[i] = array[j];
i++;
}
//同理,找到第一个大于基准的数
while (i < j && temp > array[i])
i++;
if (i < j)
{ //在上面,array[j]已被保存过,可作为临时存放载体,把大于基准数的值放在基准数右边
array[j] = array[i];
j--;
}
}
//把基准数放到i位置
array[i] = temp;
//递归方法
QuickSort(array, start, i - 1);
QuickSort(array, i + 1, last);
}
}
同理可以写一个从大到小的排序,也是利用快速排序的思想
后续再补上吧。
参考
https://www.cnblogs.com/miracleswgm/p/9199124.html
https://www.cnblogs.com/suibian1/archive/2019/05/07/10828976.html
https://www.jianshu.com/p/d8eb716307e3