zoukankan      html  css  js  c++  java
  • 计数排序 Counting Sort

    计数排序
         如果n个待排序元素,每个元素的值都在0~k之间,k为某个整数。
      当k=O(n)时,计数排序的运行时间为Θ(n)
     
    基本思想:
         对于每一个输入元素x,确定出小于等于x的元素数量m,数量m就是元素x在最终输出数组上的位置。(当有几个元素相同时,方案还有略作修改,因为不能把它们放在同一个位置上)。如:有9个元素小于x,数量9也包含x在内,x在最终已排序数组上的位置为9。
     
     
    CountingSort(A, B, k)
    1  let C[0..k] be a new array
    2  for  i ← 0  to k
    3          do C[i] ← 0
    4  for  j ← 1  to A.length
    5          do C[A[j]]  ← C[A[j]] + 1
    6  //此时,C[i] 包含 等于i 的元素的数量
    7  for  i ← 1  to k
    8          do C[i] ← C[i] + C[i - 1]
    9    //此时,C[i] 包含 小于等于i 的元素的数量
    10  for  j ← A.length downto 1
    11          do B[C[A[j]]] ← A[j]           //C[A[j]] 为小于等于A[j]的元素的数量
    12               C[A[j]]  ← C[A[j]] - 1 
     
    分析:
      输入数组为A,输出数组为B,数组A中元素的范围为[0,k]。 
      算法最后一步,每当将一个值A[j]放入数组B时,都要减小C[A[j]]的值,这样,下一个其值等于A[j]的元素直接进入数组B中A[j]的前一个位置。
     
    运行时间:
      当k=O(n)时,我们常常采用计数排序,这时运行时间为Θ(n)
      计数排序的一个重要性质就是它是稳定的:具有相同值得元素在输出数组中的位置 与 它们在输入数组中的位置相同。
  • 相关阅读:
    Ubuntu apt-get update 失败
    Ubuntu无法访问windows分区
    Python实现使用tkinter弹出输入框输入数字, 具有确定输入和清除功能
    如何更改监控器的默认计数器
    健壮的 Java 基准测试
    从虚拟机视角谈 Java 应用性能优化
    LoadRunner如何调用外部函数
    git安装与上传
    Loadrunner安装与破解【转】
    性能测试方法【转】
  • 原文地址:https://www.cnblogs.com/windlaughing/p/3092813.html
Copyright © 2011-2022 走看看