详解C++ 桶排序(BucketSort)

 更新时间:2019年04月08日 14:21:27   作者:ChanJose  
这篇文章主要介绍了C++桶排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

 一、思路

是将[0,1]区间划分为n个等长的子区间。然后,将各个元素按照自己所属的区间放入相应的桶中,只需要将每个桶的元素排好序,依次输出各个桶内的元素,就得到了有序的元素序列。

二、实现程序:

#include <iostream>
using namespace std;
 
const int offset = 105; // 为桶的边界
const int maxSize = 100; // 数组的最大存储范围
 
// 桶排序
template <typename T>
void BucketSort(T arr[], int n);
// 输出数组
template <typename T>
void Print(T arr[], int n);
 
int main(int argc, const char * argv[]) {
    int n, i, arr[maxSize];
    
    cout << "请输入要排序的数的个数:";
    cin >> n;
    srand((int)time(NULL)); // 设置时间为随机点
    for(i = 0; i < n; i++) // 产生n个随机数
        arr[i] = rand() % 100;
    cout << "排序前:";
    Print(arr, n);
    BucketSort(arr, n); // 调用桶排序
    std::cout << "排序后:";
    Print(arr, n);
    return 0;
}
 
template <typename T>
void BucketSort(T arr[], int n) {
    int i, j;
    T buckets[offset];
    
    for(i = 0; i < offset; i++) // 清零
        buckets[i] = 0;
    // 1.计数,将数组arr中的元素放到桶中
    for(i = 0; i < n; i++)
        buckets[arr[i]]++; // 将arr[i]的值对应buckets数组的下标,每有一个就加1
    // 2.排序
    for(i = 0, j = 0; i < offset; i++) {
        while(buckets[i] > 0) { // 说明存有元素,相同的整数,要重复输出
            arr[j] = i;
            buckets[i]--;
            j++;
        }
    }
}
 
// 输出数组
template <typename T>
void Print(T arr[], int n) {
    int i;
    
    for(i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}

 测试结果:

以上所述是小编给大家介绍的C++桶排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • C++ STL入门教程(3) deque双向队列使用方法

    C++ STL入门教程(3) deque双向队列使用方法

    这篇文章主要为大家详细介绍了C++ STL入门教程第三篇,deque双向队列的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • C++中set/multiset容器详解(附测试用例与结果图)

    C++中set/multiset容器详解(附测试用例与结果图)

    set/multiset属于关联式容器,底层结构是用二叉树实现,下面这篇文章主要给大家介绍了关于C++中set/multiset容器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • c语言5个常用的排序算法实例代码

    c语言5个常用的排序算法实例代码

    这篇文章主要介绍了c语言5个常用的排序算法实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • C++使用curl库进行http请求的方法详解

    C++使用curl库进行http请求的方法详解

    这篇文章主要为大家详细介绍了C++如何使用curl库进行http请求,并且实现获取返回的头信息的时间,也就是获取后台服务的当前时间,感兴趣的可以了解一下
    2023-07-07
  • C++ 类的继承与派生实例详解

    C++ 类的继承与派生实例详解

    这篇文章主要介绍了 C++ 类的继承与派生实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • C++中用指向数组的指针作函数参数

    C++中用指向数组的指针作函数参数

    多维数组名作为函数参数传递:在二维数组中,数组名a是指向首行a[0]的指针,也就是说a=&a[0]; a[0]是指向首元素a[0][0]的指针,也就是说a[0]=&a[0][0]
    2013-10-10
  • 基于VC 6.0使用C语言实现俄罗斯方块

    基于VC 6.0使用C语言实现俄罗斯方块

    这篇文章主要为大家详细介绍了基于VC 6.0使用C语言实现俄罗斯方块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • c++如何分割字符串示例代码

    c++如何分割字符串示例代码

    因为c++字符串没有split函数,所以字符串分割单词的时候必须自己手写,也相当于自己实现一个split函数吧!下面跟小编一起来看看如何实现这个功能。
    2016-08-08
  • 详解C语言和Python中的线程混用

    详解C语言和Python中的线程混用

    这篇文章主要介绍了C和Python中的线程混用的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C++实现冒泡排序(BubbleSort)

    C++实现冒泡排序(BubbleSort)

    这篇文章主要为大家详细介绍了C++实现冒泡排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论