加载中...
桶排序入门
发表于:2021-06-19 | 分类: 算法

原理

桶排序是一个排序算法,原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

桶排序以下列程序进行:

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

image.png
image.png

把数组的一组数按照 0-9,10-19, 20-29 这种规律进行分组,也就是分桶。

再在每一个桶里将数字进行排序。

从简单入门

王老师的补习班一共教 5 位小朋友,王老师让这 5 位小朋友做了一道 10 分智力算法题,5 位小朋友分别获得了不同的分数:7,5,7,8,7,5。现在需要将这 5 个分数按照从小到大的顺序打印出来。

首先,我们初始化一个长度为 11 的数组 score[],0-10 的位置分别对应 10 分的分数。

于是,我们可以得到这样一个数组:

1
2
3
4
5
6
7
8
9
10
11
score[0]=0;//没有小朋友得过 0 分
score[1]=0;//没有小朋友得过 1 分
score[2]=0;//没有小朋友得过 2 分
score[3]=0;//没有小朋友得过 3 分
score[4]=0;//没有小朋友得过 4 分
score[5]=2;//有 2 个小朋友得过 5 分
score[6]=0;//没有小朋友得过 6 分
score[7]=3;//有 3 个小朋友得过 7 分
score[8]=1;//有 1 个小朋友得过 8 分
score[9]=0;//没有小朋友得过 9 分
score[10]=0;//没有小朋友得过 10 分

最终,我们只要顺序遍历这个数组,值为 0 的就不打印位置,值不为 0 就打印出来数组代表的分数:

1
2
3
4
5
6
// score[0]~score[4] 都不打印
5,5 //score[5]=2, 有 2 个小朋友得过 5 分
// score[6]=0,不打印
777 //score[7]=3,有 3 个小朋友得过 7 分
8 //score[8]=1,有 1 个小朋友得过 8 分
// score[9], score[10]=0,不打印

这里就是把数组的每个位置当作一个桶,每种分数的获得人数就是数组元素。这种是最简易版的桶排序算法的实现。但是真正的桶排序算法是比这种复杂多了。这个小示例只是作为入门的理解之用。

上一篇:
快速排序
下一篇:
922. 按奇偶排序数组II
本文目录
本文目录