八大排序相对应链接
基本思想
基数排序是桶排序的扩展,他的基本思想是:将整数按位切割成不同的数字,然后按每个位数分别比较。
具体做法是:将所有待比较数值统一为同样的位数长度,数位较短的数前边补零。然后,从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成后,就变成一个有序数列。
图解
动态图
代码
首先我们先一轮一轮的看怎么操作
第一轮:
第二轮:
第三轮
总代码:
public class TongSort1 { public static void main(String[] args) { int[] arr = new int[]{1655,156,165,165,154,1,56,31,121,56}; sort(arr); System.out.println(Arrays.toString(arr)); } public static void sort(int[] arr){ //找数组当中的最大值 然后计算他的位数 int max = arr[0]; for (int i =0;i<arr.length;i++){ if (arr[i]>max){ max = arr[i]; } } int maxlength = (max +"").length();//最大值位数 int n = 1; //记录求余 for (int m = 0;m<maxlength;m++){ //1、定义二维数组充当桶 int[][] bucket = new int[10][arr.length]; //10是十位数 arr.length是高度 //2、定义一个一位数组当做桶记录 每有一个数进桶 记录的数就+1 int[] elementCount = new int[10]; //将arr数组放入桶内 for (int i =0;i<arr.length;i++){ //获取每个元素个位数/十位数/百位数的值 int element = arr[i] /n % 10; //element记录的是每个数求余后的数字 对应的是第几个桶 //把数据放入桶内 int count = elementCount[element];//记录当前桶内有多少数 一开始自定义为0 // 然后for循环一个数进桶 elementCount[element]++ bucket[element][count] = arr[i]; //把数据放入桶内 elementCount[element]++; //记录的桶内的数++ } //把数据取出再放回arr数组中 int index = 0; for (int k = 0;k<elementCount.length;k++){ // k小于桶记录的长度 第一个桶 第二个桶 第..k个桶 for (int h =0;h<elementCount[k];h++){ //从每个桶取数据 h<elementCount[k]意思是h小于每个桶内的数据 arr[index] = bucket[k][h]; index++; } elementCount[k] = 0;//放回后清空桶记录 方便下一次入桶 } n = n*10;//循环个位后 乘10 循环十位 } } }