基数排序 —— 使用二维数组的方式排序
思想:
-
找到需要排序的元素中的最大的数 判断有几位数 maxlength
-
先比较元素中的个位,按顺序放入,把个位相同的放到一组,然后按个位0-9的顺序取出,每组中放入和取出的顺序一样
-
把取出后的新的数组再按十位相同的进行排序,把十位相同的放到一组,再按个位0-9的顺序取出,每组中放入和取出的顺序一样
-
一直到最大的数的位数完成分组
-
基数排序完成。
public class RadixSort { public static void main(String[] args) { int[] array = new int[]{23,542,15,37,47,27,337,69,86,26}; radixSort(array); System.out.println(Arrays.toString(array)); } public static void radixSort(int[] array){ //找到数组中最大的数 int max = Integer.MIN_VALUE; for (int i = 0; i < array.length; i++) { if(array[i]>max){ max = array[i]; } } System.out.println("最大的数"+max); //存放的临时空间 int[][] temp = new int[10][array.length]; //用于存储每组中存放的个数 int[] counts = new int[10]; //计算最大数的位数 int maxLength = (max+"").length(); //进行比较的次数 for (int i = 0,n=1; i < maxLength; i++,n*=10) { //把每个数字都计算余数 for (int j = 0; j < array.length; j++) { //计算余数 int remainder = array[j]/n%10; temp[remainder][counts[remainder]] = array[j]; counts[remainder]++; } //记录取出数据放的位置 int index = 0; //把每组的数字取出 //总共的组数 for(int k=0;k<array.length;k++){ if(counts[k]!=0){ //每组中的个数 for(int l=0;l<counts[k];l++){ //取出每组的元素 array[index] = temp[k][l]; index++; } counts[k]=0; } } } } }