算法导论阅读笔记4-快速排序

2018-09-22  本文已影响7人  二进制研究员

Note:堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

算法描述

与归并排序一样,快速排序也使用了分治思想。以对子数组A[p..r]进行快速排序为例:

QUICKSORT(A, p, r)
if p < r
  q = PARTITION(A, p, r)
  QUICKSORT(A, p, q-1)
  QUICKSORT(A, q+1, r)

PARTITION(A, p, r)
x = A[r]
i = p - 1
for j = p to r - 1
  if A[j] <= x
    i = i + 1
    exchange A[i] with A[j]
exchange A[i+1] with A[r]
return i + 1
PARTITION示例

算法特性:

快速排序的随机化版本

通过显式地对输入进行重新排序,使得算法实现随机化。但是,如果使用一种称为随机抽样的随机化技术,那么可以使得分析变得更加简单。随机抽样是从子数组A[p..r]中随机选择一个元素作为主元,而不是采用A[r]作为主元。为此,首先将A[r]与从A[p..r]中随机选择的一个元素交换。通过对序列p,...,r的随机抽样,我们可以保证主元元素x=A[r]是等概率地从子数组的r-p+1个元素中选取的。因为主元元素是随机选取的,我们期望在平均情况下,对输入数组的划分是比较均衡的。

RANDOMIZED-PARTITION(A, p, r)
i = RANDOM(p, r)
exchange A[r] with A[i]
return PARTITION(A, p, r)

RANDOMIZED-QUICKSORT(A, p, r)
if p < r
  q = RANDOMIZED-PARTITION(A, p, r)
  RANDOMIZED-QUICKSORT(A, p, q-1)
  RANDOMIZED-QUICKSORT(A, q+1, r)
上一篇下一篇

猜你喜欢

热点阅读