快速排序也是一种采用分治策略的排序算法,它将一个数组分成两个子数组,取数组第一个元素作为切分点P,使左侧子数组任意元素不大于P,右侧不小于P;然后将两部分独立地排序,便完成了整个数组的排序。
引用一张图可能更好理解(截图自http://algs4.cs.princeton.edu/23quicksort/):
快速排序和归并排序是互补的,下面比较一下两种排序:
在算法流程方面,
快速排序:切分–>左右排序。
归并排序:左右排序–>归并。
划分方面,
快速排序:取决于数组的内容(一般取决于第一个元素),不一定等分。
归并排序:二等分。
时间复杂度都正比于NlogN。
额外内存开销,
快速排序:原地排序(可能只需要很小的辅助栈),空间复杂度logN。
归并排序:需要大小为N的辅助数组,空间复杂度N。
这也是快速排序相比于归并排序的优点。
稳定性,
快速排序:不稳定,相同大小的元素,在排序过程中,位置可能被交换。
归并排序:稳定。
class Quick