基数排序(桶排序)-----------这里只适用于正数,负数的使用范围后续再更新

准备一个大小为10(索引为0~9)的桶,取待排序数组中的每一位(从低位到高位)依次放到对应的桶中。
流程:

  1. 找到数组arr中的最大值,并求出最大值的位数,表示外层循环的次数
  2. 遍历数组,统计数组arr[i]对应的数字,并放到对应的桶中,同时统计当前桶存放的数字个数
  3. 将桶中的数据依次全部取出,放入原来的数组
  4. 重复进行第2、3、4步
【基数排序(桶排序)-----------这里只适用于正数,负数的使用范围后续再更新】代码实现:

package com.atguigu.sort; import java.util.Arrays; public class RadixSort { public static void main(String[] args) { int[] arr= {76,1,67,16,8,30}; radixSort(arr); System.out.println("基数排序后的数组:"+Arrays.toString(arr)); } //基数排序方法 public static void radixSort(int[] arr) { //循环次数 int num=dig(arr); int base=1; //记录每次循环比较的位置(个位,十位,百位...) int len=arr.length; while(num!=0) { //2.遍历数组,统计数组arr[i]对应的数字,并放到对应的桶中,同时统计当前桶存放的数字个数 int[][] tong=new int[10][len]; //前一个标记哪个桶,后一个标记当前桶中放的个数 int[] count=new int[10]; //统计当前桶放了几个数 for(int i=0; i0) {//说明j桶内有数字存储 for(int k=0; karr[i]?max:arr[i]; } //求出最大值的位数 int cnt=0; if(max==0) { return 1; } while(max!=0) { max/=10; cnt++; } return cnt; } }


    推荐阅读