快速排序
介绍
快速排序,听名字就能感觉到主要讲究的就是快速。它其实主要采用分治法,选取基准元,然后把小的放左边,大的放右边,遍历一遍之后就能确定基准元的位置。之后以确定后的基准元位置做左右分割,就是分治了。
不说啥,直接上图:
代码实现
1 | /** |

我们在程序的中设置的哨兵就是start和end,这里一定要注意,如果你的基准元是选取的第一个位置或者最后一个位置,那么循坏时候一定的是对面开始。
算法分析
快速排序的空间占用是$O(n)$,最坏情况下时间复杂度为$O(n^2)$,平均情况下是$O(nlogn)$。最坏情况下是怎么出来的呢?当每次分完之后一边是1个元素,一边是n-1个元素,这种情况下,时间复杂度就是最坏的了。至于$O(nlogn)$,这个可以计算出来的,也可以看这篇链接:快速排序算法的时间复杂度分析