C++学习记录算法篇—快速排序
C++学习记录算法篇—快速排序
一、快速排序的过程(从小到大排为例):
首先,假设基准数为最左边的数。
然后,让两个“哨兵”从最左边和最右边向中间探测,从左边出发的哨兵找比基准数大的数,从右边出发的哨兵找比基准数小的数
注意,因为是从小到大排,所以右边的哨兵要先出发
两个哨兵都“停下”(即找到了符合要求的数),交换两个“哨兵”的值,接着继续探测,继续交换,直到两个哨兵相遇为止
两个哨兵相遇后,交换基准数与相遇时所指示的数。
此时,基准数左边都小于基准数,基准数右边都大于基准数,这也是为什么要右边哨兵先动的原因
至此,基准数归位,接着对基准数的两边再次进行快速排序,这是一个递归的过程。
可以看到,快速排序就是不断地把基准数归位的过程
下面是代码:
1 | //快速排序函数 |
快速排序的时间复杂度为O(nlog2n【以2为底,n的对数】),最坏情况为O(n^2)。
空间复杂度为O(log2n【以2为底,n的对数】)。
是不稳定的排序
快速排序还可以用sort(&arr[下标],&arr[下标]),默认是从小到大,从大到小要添加第三个参数greater<数据类型>()。要包含头文件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





