桶式排序

桶式排序桶式排序有限个数字 m 每个数字的大小都在 1 与 n 之间 则我们可以假设有 n 个桶 遍历 m 个数字 将其存入对应的桶中 如数字的值为 3 就存入 3 号桶 桶的值对应存入数字的个数桶号 12345 计数 11201 我们按照桶的序号将数字倒出来 如下 桶的倒出顺序数字队列 5 号桶倒出 1 个 554 号桶倒出 0 个 453

简单桶式排序

有限个数字m,每个数字的大小都在1与n之间,则我们可以假设有n个桶,遍历m个数字,将其存入对应的桶中(如数字的值为3,就存入3号桶,桶的值对应存入数字的个数

桶号 1 2 3 4 5
计数 1 1 2 0 1

我们按照桶的序号将数字倒出来,如下:

桶的倒出顺序 数字队列
5号桶倒出1个5 5
4号桶倒出0个4 5
3号桶倒出2个3 5,3,3
2号桶倒出1个2 5,3,3,2
1号桶倒出1个1 5,3,3,2,1
 / * 桶式排序 * @author yangpeng * */ public class BucketSortDemo { 
    public static void main(String[] args) { int[] a = { 9, 4, 7, 2, 5, 8, 3, 2, 10, 1 }; System.out.println("初始序列:" + Arrays.toString(a)); bucketSort(a,10); } / * * @param a 需要排序的数组 * @param max 数组中的最大值 */ public static void bucketSort(int[] a,int max){ int[] count=new int[max+1];//创建一个长度为max的数组 // 遍历数组a for (int i = 0; i < a.length; i++) { // 如果数组a的值 作为的count的 下标,每次出现一次 count数组的值+1 count[a[i]]++; } // 将桶的中数字倒出 System.out.print("排序好的序列:"); for (int i = 0; i < count.length; i++) { while(count[i]>0){ System.out.print(i +" "); count[i]--; } } } }

弊端

如果我们的数字波动范围非常大,比如1到10000,那么我们需要一个10000元素数组的空间开销,而且在倒出数字的时候需要遍历10000个桶,这样效率是非常低的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220400.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:35
下一篇 2026年3月17日 下午8:35


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号