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

    【基本思想】

      计数排序类似与桶排序,也是用空间换取了时间,计数排序要求数组必须在一个确定的区间内。

      过程:1. 首先找出数组的最大值和最小值;2. 遍历数组,以数字作为键,该数字出现的次数作为值插入哈希表中;3. 在最小值到最大值这个区间内遍历哈希表,将数字反向插入数组中。

    【算法复杂度】

      计数排序是一个稳定的排序算法。当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比较排序算法。当k不
    是很大并且序列比较集中时,计数排序是一个很有效的排序算法。

    【动图演示】

    【算法实现】

    /*
    ** 计数序算法的C++实现
    ** 假设:对N个数字进行升序排序
    ** 利用STL-HashMap的属性:
    **  1.当键不存在时,则新增,初始值默认为0
    **  2.当键不存在时,if条件判断的结果为false
    */
    void countingSort(vector<int>& seq){
        map<int,int> record;    // 定义桶
        int min = seq[0],max=seq[0]; 
        for(int k=1;k<seq.size();k++) { //找到最大值最小值
            if(seq[k]<min) min=seq[k];
            if(seq[k]>max) max=seq[k];
        }
        for(int i=0;i<seq.size();i++) record[seq[i]]++; // 将数字放入对应的桶中
        seq.clear();
        for(int j=min;j<=max;j++) if(record[j]) seq.insert(seq.end(),record[j],j); // 将桶中的数字重新插入到数组中
    }
  • 相关阅读:
    weka中算法说明[转]
    浅入浅出JS中的eval及json
    JavaScript变量声明提前
    三种常用的js数组去重方法
    深入理解JavaScript的变量作用域
    调试工具--console用法收藏
    《js高级程序设计》--第三章数据类型
    Oracle数据备份和恢复
    Oracle归档日志管理
    Oracle字符集的设置
  • 原文地址:https://www.cnblogs.com/nkqlhqc/p/10805506.html
Copyright © 2011-2022 走看看