桶排序

桶排序,根据我的理解,比方说,地上放着排好顺序的11个木桶(标号为0-10),现在有一堆球,球的编码为0-10,比如编号为5的球有4,而编号为0的球0个,还有其他的球各若干个,现在要把他们分好类,从这堆球里面捡,若0号球,就放在标号为0的木桶上,1号球就放标号为1的木桶上,...... 分好类后,比如5号球有四个,木桶编号为5的就放着4个编号为5的球。现在一切就绪,就可以从0-10的木桶逐个拿出来了,按顺序拿出来的,也就完成了排序。

用java代码表示如下:

public static void main(String[] args) {
 int M= 11;//木桶个数
 int N = 100;//一堆球的个数
 int[] array = new int[M];
 Random r = new Random();
 for (int i = 0; i < N; i++) {
 int m = r.nextInt(M);     //随机生成0-10编号的球
 array[m] = array[m] + 1;  //计算放在m编号木桶下球的数量
 }
 
 for (int i = 0; i < array.length; i++) {//按顺序从编号0-10的木桶取出来
 for (int j = 0; j < array[i]; j++) {//重复打印第i个木桶放的编号为i的球
 System.out.println(i);
 }
 }
}


桶排序,可以应用在成绩排序上,比如成绩最高分为100分,最低分0分,就可以设置101个木桶,把学生的成绩放在对应的木桶上,进行排序。桶排序也有局限性,就是桶的个数不能太大,若M很大,可想而知,new int[M],占用的内存空间将会很大,在64位的电脑上,占用的内存是M*4+12+4+内存对齐 byte

M*4(int 类型大小)

12(64位,header大小,32位的话为8)

4(存放数组长度大小)

内存对齐(计算得出的结果必须是8的倍数),比如M=11,占用的内存为64byte


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值