package sort;
import java.util.Arrays;
public class RadixSortDemo {
public static void main(String[] args) {
int arr[] = {53, 3, 542, 748, 14, 214};
radixSort(arr);
}
private static void radixSort(int[] arr) {
//获取数组中最大数的位数
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
//得到最大数是几位数
int length = (max + "").length();
//定义一个二位数组,表示10个桶,每个桶就是一个一维数组
int[][] bucket = new int[9][arr.length];
//为了记录每个桶,实际存放了多少个数据,我们定义一个一维数组来记录
//各个桶的每次放入的数据个数
int[] bucketElementCounts = new int[10];
for (int i = 0, n = 1; i < length; i++, n = n * 10) {
for (int j = 0; j < arr.length; j++) {
//取出每个元素对应位的值
int digitOfElement = arr[j] / n % 10;
//放入到对应的桶中
bucket[digitOfElement][bucketElementCounts[digitOfElement]] = arr[j];
bucketElementCounts[digitOfElement]++;
}
int index = 0;
//遍历每一个桶,并将桶中的数据放入到原数组
for (int k = 0; k < bucketElementCounts.length; k++) {
//如果桶中有数据,我们才放入到原数组
if(bucketElementCounts[k]!=0){
//循环该桶
for (int l = 0; l < bucketElementCounts[k]; l++) {
//取出元素放入到arr
arr[index++] = bucket[k][l];
}
}
bucketElementCounts[k] = 0;
}
System.out.println(Arrays.toString(arr));
}
}
}
基数排序
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 桶排序、计数排序、基数排序和前面讲的那些排序有所不同,不是基于比较的排序算法,而是一种线性排序。他们的时间复杂度更...
- 这一篇我们来看三种时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序。我们把这类时间复杂度为O(n)的排序...