对n个整数用O(n)的时间进行排序
1. 步骤:(CountSort)
1) 求得min, max
2) 开辟空间 a[0, max-min] = {-1}
3) if min < 0:
data[i] += |min|
else:
data[i] –= min
4) for i = 0 to n:
a[data[i]] = 1
5) index = 0
for i = 0 to max-min:
if a[i] = 1:
data[index] = i
index += 1
注:1)非比较类型的排序
2)用空间换时间
2. 相关讨论
1) 如何将整数扩展为其他类型
(1) 用一一对应的方法
(2) 规范化
2) 如何减少空间的使用?
(1) 截断法(例如:除去 10%的最大,最小值)
(2) 考虑其分布(例如:如果是均匀分布可用桶排序)
(3) 考虑其稀疏性(例如:定义稀疏度 = n/(max - min))
(4) 通过构造区间,将区间与单个的值做对应