桶排序基数排序代码及简要说明

import java.util.Arrays;
//基数排序又名桶排序
public class TongSort {
public static void main(String[] args) {
	int[] arr= {908,10000,513,689,300,74,87,255,336,1112};
    //定义 装arr的二维数组,第一个里面装的是余数0-9,第二个最长为arr长度。
	int[][] tong=new int[10][arr.length];
    //定义二维数组余数的计数数组
	int[] tongcount=new int[10];
    //找到数组里最大的值
	int max=arr[0];
	for(int l=0;l<arr.length;l++) {
		if(max<arr[l]) {
			max=arr[l];
		}
	}
    //用最大的值的长度来判断数字位数,从而判断要比较几次
	int maxlength=(max+"").length();
	int n=1;
    //开始排序
	for(int h=0;h<maxlength;h++) {
        //将arr数组入桶
		for(int i=0;i<arr.length;i++) {
            //计算数组里每个数的余数,arr[i]/n%10是计算个位,十位,百位的数字大小的,因为n会变
			int yushu=arr[i]/n%10;
            //tong[][]二维数组,第一维放要比较位数的数字的大小,第二维放个数,tongcount[yushu]表示当前余数的数有多少个。
			tong[yushu][tongcount[yushu]]=arr[i];
            //每添加一个,余数计数器都要+1
			tongcount[yushu]++;
		}
        //将桶中的数据放回arr数组中,定义游标index,arr可以使用游标
		int index=0;
		for(int j=0;j<tongcount.length;j++) {
            //如果计数数组当前的余数不为0,表示桶中还有当前余数的数,要执行。
			if(tongcount[j]!=0) {
                //将桶中的取走
				for(int k=0;k<tongcount[j];k++) {
					arr[index]=tong[j][k];
					index++;
				}
			}
            //执行完要把计数器置为0;因为要按个位,十位,百位,等计算,不置为零会数组溢出。
			tongcount[j]=0;
		}
        //计算完 一遍,会将n*10,用来计算更高位。
		n=n*10;
	}
    //输出数组
	System.out.println(Arrays.toString(arr));			
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值