快速排序
原始序列: 49 38 65 97 76 13 27 49+
-
i j
基数(通常第一个数为基数 49)
定义两个哨兵 i,j
j负责去找比基数小的
i 负责去找比基数大的
进行第一趟快速排序
j先出发
49 38 65 97 76 13 27 49+
--
i j
交换
27 38 65 97 76 13 49 49+
--
i j
i再出发
27 38 65 97 76 13 49 49+
--
i j
交换
27 38 49 97 76 13 65 49+
--
i j
j再出发
27 38 49 97 76 13 65 49+
--
i j
交换
27 38 13 97 76 49 65 49+
--
i j
i再出发
27 38 13 97 76 49 65 49+
--
i j
交换
27 38 13 49 76 97 65 49+
--
i j
j再出发
27 38 13 49 76 97 65 49+
--
ij
一趟快速排序后,基数为中心,左边的元素比基数都小,右边的元素比基础都大…这样出现两个子序列,再分别对两个子序列使用刚才的步骤进行快速排序即可
时间复杂度O(nlog2n) 最坏情况下时间复杂度O(n2)
空间复杂度O(log2n)
就平均时间而言,快速排序是所有排序算法中最好的.