程序分享--排序算法--桶排序

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》《做好面试准备,迎接2024金三银四》。

-------------------------------------正文----------------------------------------

桶排序:概述
桶排序又叫箱排序,是计数排序的升级版,它的工作原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。

计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。网络中很多博文写的桶排序实际上都是计数排序,并非标准的桶排序,要注意辨别。

桶排序:算法描述

1.找出待排序数组中的最大值max、最小值min
2.使用 动态数组bucketArr作为桶,桶里放的元素也用bucketArr存储。桶的数量为(max-min)/arr.size()+1
3.遍历数组 arr,计算每个元素 arr[i] 放的桶
4.每个桶各自排序
5.遍历桶数组,把排序好的元素放进输出数组

#include <iostream>
#include <vector>
#include <algorithm>
 
void bucketSort(std::vector<int>& arr, int bucketSize)
 {
    if (arr.empty() || bucketSize <= 0) return;
 
    int minValue = *std::min_element(arr.begin(), arr.end());
    int maxValue = *std::max_element(arr.begin(), arr.end());
 
    int numBuckets = (maxValue - minValue) / bucketSize + 1;
    std::vector<std::vector<int>> buckets(numBuckets);
 
    // 分配元素到桶中
    for (int i = 0; i < arr.size(); ++i) 
    {
        int bucketIndex = (arr[i] - minValue) / bucketSize;
        buckets[bucketIndex].push_back(arr[i]);
    }
 
    // 对每个桶进行排序
    for (int i=0; i<buckets.size(); i++) 
    {
        std::vector<int>& bucket=buckets[i];
        std::sort(bucket.begin(), bucket.end());
    }
 
    // 合并桶回原数组
    arr.clear();
    for (int i=0; std::vector<int>& bucket=buckets[i]; i++) 
    {
        int value;
        for (int j=0; j<bucket.size(); j++)
         {
            arr.push_back(bucket[j]);
        }
    }
}
 
int main() 
{
    std::vector<int> data = {5, 3, 1, 2, 8, 7, 6, 4};
    int bucketSize = 2; // 可以根据实际情况调整桶的大小
    bucketSort(data, bucketSize);
 
    for (int num : data) {
        std::cout << num << " ";
    }
 
    return 0;
}

相关推荐

  1. 程序分享--排序算法--排序

    2024-03-18 08:24:05       48 阅读
  2. 排序算法-排序

    2024-03-18 08:24:05       40 阅读
  3. 程序分享--排序算法--冒泡排序

    2024-03-18 08:24:05       41 阅读
  4. 程序分享--排序算法--希尔排序

    2024-03-18 08:24:05       41 阅读
  5. 程序分享--排序算法--归并排序

    2024-03-18 08:24:05       44 阅读
  6. 程序分享--排序算法--基数排序

    2024-03-18 08:24:05       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 08:24:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 08:24:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 08:24:05       87 阅读
  4. Python语言-面向对象

    2024-03-18 08:24:05       96 阅读

热门阅读

  1. 《C++ Primer Plus》第六章课后题

    2024-03-18 08:24:05       32 阅读
  2. Haproxy 负载均衡集群

    2024-03-18 08:24:05       41 阅读
  3. 【Docker】Solr容器化部署及配置参数详情

    2024-03-18 08:24:05       46 阅读
  4. Solr完结版

    2024-03-18 08:24:05       39 阅读
  5. Kafka(十)安全

    2024-03-18 08:24:05       34 阅读
  6. Mysql数据库的多实例部署

    2024-03-18 08:24:05       36 阅读
  7. widget一些控件的使用

    2024-03-18 08:24:05       41 阅读
  8. C++ L2【入门】求和

    2024-03-18 08:24:05       38 阅读
  9. ubuntu(22.04版本之前)安装docker

    2024-03-18 08:24:05       43 阅读