6816: 学习系列——排序—— 桶排序(Bucket sort)
[Creator : ]
Description
【算法思路】
桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的。
【算法详解】
桶排序的思想近乎彻底的分治思想。算法的过程描述如下:
第一步
遍历集合可得,最大值为:$121$,最小值为:$-10$,待申请桶的个数为:$\frac{\text{max}}{10}-\frac{\text{min}}{10}+1=12-(-1)+1=14$。
第二步
遍历待排序集合,依次添加各元素到对应的桶中。
第三步
对每一个桶中元素进行排序,并移动回原始集合中,即完成排序过程。
图解算法
【动画展示】
桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的。
【算法详解】
桶排序的思想近乎彻底的分治思想。算法的过程描述如下:
- 根据待排序集合中最大元素和最小元素的差值范围和映射规则,确定申请的桶个数;
- 遍历待排序集合,将每一个元素移动到对应的桶中;
- 对每一个桶中元素进行排序,并移动到已排序集合中。
- 元素值域的划分,也就是元素到桶的映射规则。映射规则需要根据待排序集合的元素分布特性进行选择,若规则设计的过于模糊、宽泛,则可能导致待排序集合中所有元素全部映射到一个桶上,则桶排序向比较性质排序算法演变。若映射规则设计的过于具体、严苛,则可能导致待排序集合中每一个元素值映射到一个桶上,则桶排序向计数排序方式演化。
- 排序算法的选择,从待排序集合中元素映射到各个桶上的过程,并不存在元素的比较和交换操作,在对各个桶中元素进行排序时,可以自主选择合适的排序算法,桶排序算法的复杂度和稳定性,都根据选择的排序算法不同而不同。
第一步
遍历集合可得,最大值为:$121$,最小值为:$-10$,待申请桶的个数为:$\frac{\text{max}}{10}-\frac{\text{min}}{10}+1=12-(-1)+1=14$。
第二步
遍历待排序集合,依次添加各元素到对应的桶中。
桶下标 |
桶中元素 |
0 |
-7, -3, -10 |
1 |
3, 4 |
2 | 16 |
3 |
21, 25, 22 |
4 |
32 |
5 | 43 |
6 |
51, 56, 56 |
7 |
68 |
8 |
77, 70 |
9 |
87 |
10 | 99 |
11 |
|
12 |
|
13 | 121 |
第三步
对每一个桶中元素进行排序,并移动回原始集合中,即完成排序过程。
图解算法
【动画展示】