详解Bucket Sort桶排序算法及C++代码实现示例

2025-05-27 0 70

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(n log n)下限的影响。

桶排序以下列程序进行:
1.设置一个定量的数组当作空桶子。
2.寻访序列,并且把项目一个一个放到对应的桶子去。
3.对每个不是空的桶子进行排序。
4.从不是空的桶子里把项目再放回原来的序列中。

桶排序图文示例
桶排序代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
/*

* 桶排序

*

* 参数说明:

* a -- 待排序数组

* n -- 数组a的长度

* max -- 数组a中最大值的范围

*/

void bucket_sort(int a[], int n, int max)

{

int i, j;

int *buckets;

if (a==NULL || n<1 || max<1)

return ;

// 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。

if ((buckets=(int *)malloc(max*sizeof(int)))==NULL)

return ;

memset(buckets, 0, max*sizeof(int));

// 1. 计数

for(i = 0; i < n; i++)

buckets[a[i]]++;

// 2. 排序

for (i = 0, j = 0; i < max; i++)

while( (buckets[i]--) >0 )

a[j++] = i;

free(buckets);

}

说明:
bucketSort(a, n, max)是作用是对数组a进行桶排序,n是数组a的长度,max是数组中最大元素所属的范围[0,max)。
假设a={8,2,3,4,3,6,6,3,9}, max=10。此时,将数组a的所有数据都放到需要为0-9的桶中。如下图:

详解Bucket Sort桶排序算法及C++代码实现示例

在将数据放到桶中之后,再通过一定的算法,将桶中的数据提出出来并转换成有序数组。就得到我们想要的结果了。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解Bucket Sort桶排序算法及C++代码实现示例 https://www.kuaiidc.com/74608.html

相关文章

发表评论
暂无评论