zoukankan      html  css  js  c++  java
  • 排序算法——桶排序

    七、桶排序(Bucket Sort)

      要使桶排序正常运行,需要额外的信息:

      输入A1,A2,...,AN必须只由小于M的正整数构成,即Ai<M。使用一个大小为M的数组result,初始化为全0。数组有M个单元,即M个桶(bucket)。 1 void bucketSort(vector<int> &a, const int maxVal 2 {

     3     //int result[maxVal] = { 0 };
     4     /* 初始化桶 */
     5     for (int i = 0; i < maxVal; i++)
     6     {
     7         result[i] = 0;
     8     }
     9     /* 读入数据装桶 */
    10     for (int i = 0; i < a.size(); i++)
    11     {
    12         result[a[i]]++;
    13     }
    14     /* 将桶中的每个数打印出来,出现几次就打印几次 */
    15     for (int i = 0; i < maxVal; i++)
    16   
    for (int j = 0; j < result[i]; j++) 17 { 18 cout << i << endl; 19 }
    20
    }

    步骤:

      result[Ai]中存放的是Ai出现的次数;

           读入Ai时,result[Ai]增1;  

      所有输入数据读入后,扫描数组result,打印出排序后的数据,result[Ai]值是n,Ai就打印n次.

    eg.

           输入数组{1,4,5,3,7,8,4,9,6,5,0},最大为9,另建一个大小为10的数组,初始化为全0。

    读入数组:

      遇到1,将result[1]加1

      遇到4,将result[4]加1

      ......

      遇到5,将result[5]加1

      遇到0,将result[0]加1

    得到结果:

      

    打印结果:

      0 1 3 4 4 5 5 6 7 8 9

     

    时间复杂度:

      算法用时O(M+N),M为桶的个数,N为待排序数组的大小。

    空间复杂度:

      O(M+N)

           如果输入数据非常庞大,桶的数量会非常多,空间代价将会非常大。 

     

     

      

      

      

  • 相关阅读:
    26、面向对象设计模式之单例模式——泛型单例
    Unity 汽车碰撞
    makeObjectsPerformSelector对数组中的对象发送消息执行对象中方法
    NSHashTable NSPointerArray
    webrtc 音频一点相关知识
    记一次ios加急上架经历
    iOS 获取当前正在显示的ViewController
    ios表单上传图片或文件
    https适配
    swift block
  • 原文地址:https://www.cnblogs.com/warrior1988/p/8028636.html
Copyright © 2011-2022 走看看