算法_桶排序(java)


前言

流程图:
在这里插入图片描述

一、桶排序思想步骤

桶排序:将一组数分成若干份,然后利用数求出每份之间的范围差,然后将在符合范围的数进行插入,因为存在不断地插入数,所以可以使用LinkList和ArrayList链表来进行对桶数的存储和桶内数的存储。
过程:首先找出数中的最大值和最小值,然后求出桶数和间隔数,之后创建链表将桶数存入,将数中的每个数存入到对应的桶内,对每个桶内进行排序,从0号桶开始,将每个桶内排好顺序的数放入到一个新的数组中,最后打印数组即可

桶数计算:(max-min)/数组长度+1
间隔数:(max-min+1)/数组长度

二、代码

代码如下(示例):

void Bucketsort(int a[])
	{
		int max =a[0];
		int min =a[0];
		for(int i =0;i<a.length;i++) //求出最大最小值
		{
			if(a[i]<min)
			{
				min = a[i];
			}
			if(a[i]>max)	
			{
				max = a[i];
			}
		}
		//也可以这样写
	/*	
		int max1 = Integer.MAX_VALUE;
		int min1 = Integer.MIN_VALUE;
		for(int i =0;i<a.length;i++)
		{
			max1 = Math.max(max1, a[i]);
			min1 = Math.min(min1, a[i]);
		}
	*/
		//计算桶的数量
		int bucketnum = (max-min)/a.length+1;
		int m = (max-min+1)/a.length;//间隔
		ArrayList<ArrayList<Integer>> bucket =new ArrayList<ArrayList<Integer>>(bucketnum);
		//将每个桶放入到链表中,因为不断插入,所以使用ArrayList
		for(int i=0;i<bucketnum;i++)
		{
			bucket.add(new ArrayList<Integer>());
		}
		//将每个元素放入桶中
		for(int i=0;i<a.length;i++)
		{
			int num = (a[i]-min)/m;
			bucket.get(num).add(a[i]);
		}
		//对每个桶进行排序
		for(int i=0;i<bucket.size();i++)
		{
			Collections.sort(bucket.get(i));
		}
		//将桶中的数赋值到原序列
		int index =0;
		for(int i =0;i<bucket.size();i++)
		{
			for(int j =0;j<bucket.get(i).size();j++)
			{
				a[index++] = bucket.get(i).get(j);
			}
		}

如文章存在错误,请在评论区指出,谢谢观看!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物皆可der

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值