线性排序算法
通过比较元素的大小的排序算法的运行时间下界为NlgN(可以用决策树来证明)
但是满足某些条件的序列可以达到线性。假设序列A有N个元素,这N个元素都是大于1小于K的整数。伪代码如下,
A[N], B[K], C[N],C[N]为排序结果
for i <- 1 to K
do B[i] <- 0
for i <- 1 to N
do B[A[i]] <- B[A[i]] + 1
for i <- 1 to K
do B[i] <- B[i-1] + B[i]
for i <- 1 to N
do C[B[A[i]]] <- A[i]
B[A[i]] <- B[A[i]] - 1
显然算法的运行时间为 2N + K(初始化没有计算在内,因为在很多语言里初始化数据只花费常量时间)。当N远远大于K的时候,2N + K--> 2N.
仔细分析一下,这算法如此高效的原因在于每个元素的相对位置不会变化(在a右边的数不会跑到a左边)。而在比较算法里面就保证不了这种情形。我们称之为算法的稳定性。

浙公网安备 33010602011771号