package org.structure.sort;
import java.util.Arrays;
/**
* 基数排序
* @author cjj_1
* @date 2020-08-17 17:16
*/
public class RadixSorting {
public static void main(String[] args) {
//要排序的数组
int[] arr = {53,3,542,748,14,214};
//辅助桶 10个
int[][] buckets = new int[10][arr.length];
//给每个桶计数
int[] bucketsElementCount = new int[10];
//查找最大数
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max)
max = arr[i];
}
// 计算轮询数
int temp;
int maxLength = (max+"").length();
for(int i =0,n=1;i<maxLength;i++,n*=10){
//首先遍历数组,给桶中存放
for(int j=0;j<arr.length;j++){
temp = arr[j]/n%10;
buckets[temp][bucketsElementCount[temp]]=arr[j];
bucketsElementCount[temp]+=1;
}
//从桶中取数据到arr中
int index =0;
for(int p=0;p<bucketsElementCount.length;p++){//遍历桶
if(bucketsElementCount[p] != 0){//说明第p个桶中有数据,遍历桶
//遍历桶
for(int m=0;m<bucketsElementCount[p];m++){
arr[index++] = buckets[p][m];//存储到arr中
}
}
//结束后,把桶中的数据的数量 清0
bucketsElementCount[p] = 0;
}
}
System.out.println(Arrays.toString(arr));
}
}
基数排序
最新推荐文章于 2023-04-13 11:24:26 发布