对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) 通过构造区间,将区间与单个的值做对应

转载于:https://www.cnblogs.com/wangshide/archive/2011/10/23/2222163.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值