zoukankan      html  css  js  c++  java
  • 对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) 通过构造区间,将区间与单个的值做对应

  • 相关阅读:
    Java 多线程概述
    Java 线程的创建和启动
    状态模式
    Spring 依赖注入
    Spring IOC
    在JavaEE中使用Mybatis框架
    Active Reports 补空白行
    SpreadForWin 清空Sheet
    日期格式转换
    Select Case 的实现
  • 原文地址:https://www.cnblogs.com/wangshide/p/2222163.html
Copyright © 2011-2022 走看看