相比于冒泡排序算法,快速排序要快的多,一般情况下冒泡排序的时间复杂度是O(n²),而快速排序平均时间复杂度为O(nlogn),可以说是在所有交换排序中时间复杂度最低的一个;但是在个别情况下也会达到和冒泡排序同等的时间复杂度,比如待排序的元素中用于排序的关键字全部相等,或者已经按照完全有序排列,这时候快速排序算法的时间复杂度可能会达到最差O(n²);
快速排序算法思路:
- 每次从待排序的元素中取出一个元素作为基准数;
- 分别从序列的两边遍历序列,(使用LeftPoint 表示从左边遍历序列时指向的当前遍历元素的索引值,使用RightPoint表示从右边遍历序列时指向的当前遍历元素的索引值,有些数据结构和算法书里也称之为两个哨兵);
- 当RightPoint和LeftPoint 未相遇时,分别前进(LeftPoint 向找,RightPoint 向前找) 直到RightPoint 遇到一个比基准数大且LeftPoint 遇到一个比基准数小的值停止,此时交换RightPoint 和LeftPoint 指向的值;
- 按照步骤三一直查找,查找结束后将基准数归位,此时将得到这样一个序列,基准书左边的值都比基准数小,基准数右边的值都比基准数大,经过这样一趟排序最终能确定基准数在结果有序序列中的准确的位置;
- 排序一