桶排序
2014-04-29 09:28
2331 查看
概要
本章介绍排序算法中的桶排序。内容包括:1. 桶排序介绍
2. 桶排序图文说明
3. 桶排序实现
3.1 桶排序C实现
3.2 桶排序C++实现
3.3 桶排序Java实现
转载请注明出处:https://www.geek-share.com/detail/2609734882.html
更多排序和算法请参考:数据结构与算法系列 目录
桶排序介绍
桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。
在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。
桶排序图文说明
桶排序代码/* * 桶排序 * * 参数说明: * a -- 待排序数组 * n -- 数组a的长度 * max -- 数组a中最大值的范围 */ void bucketSort(int a[], int n, int max) { int i,j; int buckets[max]; // 将buckets中的所有数据都初始化为0。 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; } }
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的桶中。如下图:
/** * 桶排序:Java * * @author skywang * @date 2014/03/13 */ public class BucketSort { /* * 桶排序 * * 参数说明: * a -- 待排序数组 * max -- 数组a中最大值的范围 */ public static void bucketSort(int[] a, int max) { int[] buckets; if (a==null || max<1) return ; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。 buckets = new int[max]; // 1. 计数 for(int i = 0; i < a.length; i++) buckets[a[i]]++; // 2. 排序 for (int i = 0, j = 0; i < max; i++) { while( (buckets[i]--) >0 ) { a[j++] = i; } } buckets = null; } public static void main(String[] args) { int i; int a[] = {8,2,3,4,3,6,6,3,9}; System.out.printf("before sort:"); for (i=0; i<a.length; i++) System.out.printf("%d ", a[i]); System.out.printf("\n"); bucketSort(a, 10); // 桶排序 System.out.printf("after sort:"); for (i=0; i<a.length; i++) System.out.printf("%d ", a[i]); System.out.printf("\n"); } }
View Code
上面3种实现的原理和输出结果都是一样的。下面是它们的输出结果:
before sort:8 2 3 4 3 6 6 3 9 after sort:2 3 3 3 4 6 6 8 9
相关文章推荐
- 桶排序和直接排序的算法和数据结构
- 三种线性排序算法:计数排序、桶排序与基数排序
- 桶排序与带循环的算法时间复杂度分析
- 【算法导论】排序 (四):决策树、线性时间排序(计数、基数、桶排序)
- 桶排序
- 【算法导论】第八章之桶排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 桶排序
- 算法总结系列之六: 桶排序(Bucket Sort)
- 桶排序 Bucket sort
- 线性时间排序——计数排序,基数排序,桶排序
- 啊哈!算法】最快最简单的排序——桶排序
- 桶排序的思想
- 桶排序--小试牛刀
- 三种线性的非基于比较的排序算法:计数排序、桶排序与基数排序
- 桶排序
- 桶排序
- 桶排序
- 桶排序和基数排序(熟练掌握代码中结构体的使用trick)
- 【啊哈!算法】最快最简单的排序——桶排序