介绍
分析
基本思想:
通过一遍排序将需要排序的数据分成两部分,使其中一部分数据比另一部数据小,然后再分别对这两部分继续进行这种排序,按此规则继续,直到每个部分为空或者只含一个数时,整个排序结束。
算法描述:
- 从数列中挑出一个元素,称该元素为“基准”
- 扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准“大的元素排在基准后面
- 通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序
C实现
1 | /** |
Swift实现
1 | class QuicklySort { |
总结
时间复杂度:
- 最差O(n^2)
最优O(nlogn)
平均O(nlogn)
空间复杂度:
- O(nlogn)
稳定性:
- 不稳定
当数组元素基本有序时,快速排序将没有任何优势,基本退化为冒泡排序,可在选取基准元素时选取中间值进行优化。