算法导论:c++桶排序

客官°小女子只卖身不卖艺 2022-06-04 04:29 270阅读 0赞

这里写图片描述

代码实现

桶排序是按照桶的概念把元素往里面放,然后桶内还有一个排序,桶内排序可以用比较排序也可以用计数排序递归使用桶排序也可以。我这里比较懒,直接用了sort函数。直接就三步,仍然用vector实现。

  1. 建桶
  2. 放桶
  3. 连接桶
  1. vector<double> bucket_sort(vector<double> array) {
  2. vector<vector<double>> output(10);//建立十个桶
  3. for (int i = 0; i < array.size(); i++)
  4. {
  5. int temp = array[i] * 10; //根据小数点第一位放入不同的桶中
  6. output[temp].push_back(array[i]);
  7. }
  8. array.clear(); //清除原无序数组
  9. for (auto vec:output)
  10. {
  11. if (!vec.empty()) {
  12. sort(vec.begin(),vec.end()); //对非空桶进行排序
  13. array.insert(array.end(),vec.begin(), vec.end()); //按桶的顺序放入原数组
  14. }
  15. }
  16. return array;
  17. }
  18. int main()
  19. {
  20. vector<double> array = {
  21. 0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68 };
  22. array=bucket_sort(array);
  23. for (double f:array)
  24. {
  25. cout << f << " ";
  26. }
  27. }

测试的例子与书本相同,输出:
这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 排序算法-排序

    先创建若干个桶,每个桶存放不同范围的数据 桶和桶之间的跨度=(数据最大值-数据最小值)/ (桶的数量 - 1) 假设有一个数组:1.2,0.5,4.5,2.6,2.7

    相关 算法导论c++归并排序

    基本思想就是把数组一直分成两半,然后对这两半进行排序归并。 先分成左右两半,然后合并时比较左右两半一直选最小的替代原数组。这种排序是非原址的,需要额外的空间。 伪代码非

    相关 排序算法c语言描述---排序

    十一。桶排序 一。个人理解 桶排序是另外一种以O(n)或者接近O(n)的复杂度排序的算法. 它假设输入的待排序元素是等可能的落在等间隔的值区间内.一个长度为N的数组