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();
            }
        }
    }
  • 相关阅读:
    Webpack配置
    闭包函数
    Vue2.0(一) 新手搭建环境
    用python编写一个合格的ftp程序,思路是怎样的?
    项目流程规范
    python: 基本数据类型 与 内置函数 知识整理
    前端知识 备忘录
    架构的演化路线
    深入理解并使用python的模块与包
    jquery 知识整理
  • 原文地址:https://www.cnblogs.com/nkqlhqc/p/9768551.html
Copyright © 2011-2022 走看看