说明:
1. 基数排序是对传统桶排序的扩展,速度很快
2. 基数排序是经典的空间换时间的方式,占用内存很大,当对海量数据排序时 容易出现outofmenmoryerroor
3. 技术排序是稳定的即原序列r[i]=r[j] ,r[i]在前 则排序后r[i]仍在前,顺序不变
4. 基数排序属于“分配式排序,又称“桶字法”,它是通过键值的各个位的值将要排序的元素分配到某些桶中,达到排序的目的
先写一个排序方法
public static void radixSort(int []arr) {
/*1.定义一个二维数组,表示10个数,每个桶就是一个一维数组
* 2.二维数组包含10个一维数组
* 3.为了防止放入数的时候数据溢出 则每个一维数组(桶)大小定为arr.length
* */
int[][] bucket = new int[10][arr.length];
/*为了记录每个桶中实际存放了多少个数据,我们定义一个一维数组来记录各个
* 桶的每次放入的数据的个数
* 可以理解为:buckElementCounts[0],记录的就是bucket[0]桶放入的数据的个数
* */
int bucketElementCounts[] = new int[10];
for (int j = 0, n = 1; j < arr.length; j++, n *= 10) {
for (int i = 0; i < arr.length; i++) {
//取出每个元素的个位的值
int digitOfElement = arr[i] / n % 10;
//放入对应的桶中
bucket[digitOfElement][bucketElementCounts[digitOfElement]] = arr[i];
bucketElementCounts[digitOfElement]++;
}
//按照这个桶的顺序
int index = 0;
for (int i = 0; i < bucketElementCounts.length; i++) {
if (bucketElementCounts[i] != 0) {
for (int l = 0; l < bucketElementCounts[i]; l++) {
// 取出元素放到arr
arr[index] = bucket[i][l];
index++;
}
}
bucketElementCounts[i] = 0;
}
}
}
然后测试
public static void main(String[] args) {
int []arr={6,4,2,4,1,5,6,7,2,5,634};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
这是结果图

1577

被折叠的 条评论
为什么被折叠?



