快速排序作为一种基础的算法,广泛用于各种语言的内置排序库中,其中java使用了双基准快速排序(主要是双基准更有效的利用了计算机的缓存机制)。它是一种原地的,空间复杂度为O(1)、时间复杂度O(nlogn)、不稳定的排序算法。分为切分,和递归两个步骤。其中切分的步骤可以帮助我们以O(n)的时间复杂度找到数组中某种排名为K的元素。然而在实际实现中,快排有一些小技巧,也是我们必须要掌握的一种算法。
以下给出python版本的实现代码。
1 | class Solution: |
两个partition的效果是一样的。
注意,我们使用一种随机方法,保证了我们的快排在遇到严格递增序列或者严格递减序列的时候,期望也是O(nlogn)时间复杂度的。这是一种随机方法,还有其他随机算法的实现。这种比较简单。而这个随机的步骤,也使得我们的快排不是稳定。