线性排序算法

通过比较元素的大小的排序算法的运行时间下界为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左边)。而在比较算法里面就保证不了这种情形。我们称之为算法的稳定性。

 

 

posted @ 2013-10-22 23:56  Homura  阅读(202)  评论(0)    收藏  举报