zoukankan      html  css  js  c++  java
  • 桶排序

    【基本思想】

      假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

    【算法复杂度】

      桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。

      很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。

    【动图演示】

     

    【算法实现】

    /*
    ** 桶排序算法的C++实现
    ** 假设:对N个数字进行升序排序
    ** 每个桶中的数据结构为:List-链表
    */
    void bucketSort(vector<int>& seq){
        list<int> bucket[11]; // 定义桶的大小
        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];
        }
        int len = max - min;
        for(int i=0;i<seq.size();i++){
            bucket[(seq[i]*10)/len].push_back(seq[i]);  // 将数字按照映射放入桶中
        }
        for(int i=0;i<11;i++){
            bucket[i].sort(); // 分别对每个桶中的数字排序(这里调用了STL链表自身的排序算法)
        }
        seq.clear();
        for(int i=0;i<11;i++){
            while(bucket[i].size()){  // 将桶中的数字放回数组中
                seq.push_back(bucket[i].front());
                bucket[i].pop_front();
            }
        }
    }
  • 相关阅读:
    样本间相似度/距离的计算方法总结
    package.json字段全解
    使用Charles对Https请求进行抓包
    URI和URL的区别
    webstorm常用快捷键
    HTML中判断手机是否安装某APP,跳转或下载该应用
    Git 常用命令大全
    vue的测试(Vue.js devtool)
    js求两个数的最大公约数
    javascript实现验证身份证号的有效性并提示
  • 原文地址:https://www.cnblogs.com/nkqlhqc/p/9768551.html
Copyright © 2011-2022 走看看