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)
      计数排序的一个重要性质就是它是稳定的:具有相同值得元素在输出数组中的位置 与 它们在输入数组中的位置相同。
  • 相关阅读:
    jquery select操作和联动操作
    chrome 31删除输入框的历史记录
    14、python开发之路-并发编程之I/O模型
    13、python开发之路-并发编程之多线程
    12、python全栈之路-并发编程之多进程
    11、python全栈之路-网络编程
    10、python全栈之路-面向对象进阶
    9、python全栈之路-模块与包
    8、python全栈之路-初识面向对象
    6、python全栈之路-常用模块
  • 原文地址:https://www.cnblogs.com/windlaughing/p/3092813.html
Copyright © 2011-2022 走看看