第一轮排序:将每个数个位取出,看这个数应该放在哪个桶
按照数组下标,取出数据,放入原来数组
{542,53,3,14,241,748}
第二轮:按十位取出,十位没数则补0,在取出放入原来数组
{3,14,214,542,748,53}
{3,14,53,214,542,748}
排序代码实现
package sort;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int arr[] = {53,3,542,748,14,214};
radicSort(arr);
}
//基数排序方法
public static void radicSort(int[] arr){
//第一轮 定义一个二维数组表示10个桶 用空间换时间
int[][] bucket = new int[10][arr.length];
//为了记录桶中数据多少 定义一个一维数组记录个数
int[] bucketCounts = new int[10];
for(int j = 0;j < arr.length;j++){
//取出元素个位
int num = arr[j]%10;
//放入对应桶中
bucket[num][bucketCounts[num]] = arr[j];
bucketCounts[num]++;
}
//一次取出放回数组中
int index = 0;
for (int k = 0;k < bucketCounts.length;k++){
//如果桶中有数据才放入到元素
if (bucketCounts[k] != 0){
for (int l = 0;l < bucketCounts[k];l++){
arr[index++] = bucket[k][l];
}
}
bucketCounts[k] = 0;
}
System.out.println("对个位排序"+ Arrays.toString(arr));
//第二轮
for(int j = 0;j < arr.length;j++){
//取出元素个位
int num = arr[j]/10%10;
//放入对应桶中
bucket[num][bucketCounts[num]] = arr[j];
bucketCounts[num]++;
}
//一次取出放回数组中
index = 0;
for (int k = 0;k < bucketCounts.length;k++){
//如果桶中有数据才放入到元素
if (bucketCounts[k] != 0){
for (int l = 0;l < bucketCounts[k];l++){
arr[index++] = bucket[k][l];
}
}
bucketCounts[k] = 0;
}
System.out.println("对十位排序"+ Arrays.toString(arr));
//第三轮
for(int j = 0;j < arr.length;j++){
//取出元素个位
int num = arr[j]/100%10;
//放入对应桶中
bucket[num][bucketCounts[num]] = arr[j];
bucketCounts[num]++;
}
//一次取出放回数组中
index = 0;
for (int k = 0;k < bucketCounts.length;k++){
//如果桶中有数据才放入到元素
if (bucketCounts[k] != 0){
for (int l = 0;l < bucketCounts[k];l++){
arr[index++] = bucket[k][l];
}
}
bucketCounts[k] = 0;
}
System.out.println("对百位排序"+ Arrays.toString(arr));
}
}
总结代码实现
package sort;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int arr[] = {53,3,542,748,14,214};
radicSort(arr);
}
//基数排序方法
public static void radicSort(int[] arr){
//得到数组中最大位数
int max = arr[0];