码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法——桶排序

时间:2017-12-12 22:10:08      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:分享   正整数   个数   算法   pos   桶排序   结果   ali   需要   

七、桶排序(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)

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

 

 

 

 

  

  

  

排序算法——桶排序

标签:分享   正整数   个数   算法   pos   桶排序   结果   ali   需要   

原文地址:http://www.cnblogs.com/warrior1988/p/8028636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!