基数排序
第11节 基数排序练习题
对于一个int数组,请编写一个基数排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
1
import java.util.*;
2
3
public class RadixSort {
4
// 各位装通法
5
public int[] radixSort(int[] A, int n) {
6
int length = n;
7
int divisor = 1;// 定义每一轮的除数,1,10,100...
8
9
int[][] bucket = new int[10][length];// 定义了10个桶,以防每一位都一样全部放入一个桶中
10
int[] count = new int[10];// 统计每个桶中实际存放的元素个数
11
int digit;// 获取元素中对应位上的数字,即装入那个桶
12
13
for (int i = 1; i <= 3; i++) {// 经过4次装通操作,排序完成
14
for (int temp : A) {// 计算入桶
15
digit = (temp / divisor) % 10;
16
bucket[digit][count[digit]++] = temp;
17
}
18
19
int k = 0;// 被排序数组的下标
20
for (int b = 0; b < 10; b++) {// 从0到9号桶按照顺序取出
21
if (count[b] == 0)// 如果这个桶中没有元素放入,那么跳过
22
continue;
23
for (int w = 0; w < count[b]; w++) {
24
A[k++] = bucket[b][w];
25
}
26
count[b] = 0;// 桶中的元素已经全部取出,计数器归零
27
}
28
divisor *= 10;
29
}
30
return A;
31
}
32
}
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
答案正确:恭喜!您提交的程序通过了所有的测试用例