桶排序(Bucket Sort)

桶排序(Bucket Sort)


1. 基本思想

简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的再进行排序。

步骤

  1. 划分桶
  2. 入桶
  3. 桶内排序
  4. 出桶

2. 排序流程

例如对[0, 40]范围内的n个整数A[1..n]排序 。

首先,可以把桶设为大小为10的范围,具体而言,设集合B[1]存储[0, 10)的整数,集合B[2]存储[10, 20)的整数,……集合B[i]存储 [(i1)10,i10) 的整数, i=1,2,3,4 ,总共有4个桶。

然后,对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的桶B[j]中。 再对这4个桶中每个桶里的数字排序,这时可用冒泡,选择,乃至快排,一般来说任何排序法都可以。

最后,依次输出每个桶里面的数字,且每个桶中的数字从小到大输出,这样就得到所有数字排好序的一个序列了。

这里写图片描述

3. 算法实现

代码

#include <stdio.h>

#define N 13
#define NBUCKET 4

int array[N]={
  11, 23, 17, 35, 6, 19, 24, 1, 30, 29, 7, 11, 22};

int bucket[NBUCKET][N]={
  0}; /* 以排序0~40间的数为列,分为4个桶[0,10),[10,20),[20,30),[30,40) */
int b_index[NBUCKET]={
  0}; /* 记录每隔桶中存放的数据个数 */

/* 打印数组 */
void print_array(int arr[],int len)
{
    int i;
    for(i=0;i<N;i++)
        printf("%d ",arr[i]);
    printf("\n");
}

/* 打印桶 */
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值