4.1 快速排序的步骤

  1. 从数列中挑出一个元素,称为”基准”(pivot),
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

4.2 快速排序图解

4. 快速排序 - 图1

4.3 快速排序代码

  1. def quicksort(seq):
  2. if len(seq) < 2:
  3. return seq
  4. else:
  5. base = seq[0]
  6. left = [elem for elem in seq[1:] if elem <= base]
  7. right = [elem for elem in seq[1:] if elem > base]
  8. return quicksort(left) + [base] + quicksort(right)

4.4 快速排序的时间复杂度

  • 最优时间复杂度:O(nlogn)
  • 最坏时间复杂度:O(n)
  • 稳定性:不稳定