计数排序
第10节 计数排序练习题
对于一个int数组,请编写一个计数排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
Java (javac 1.7)
代码自动补全
1
import java.util.*;
2
3
public class CountingSort {
4
public int[] countingSort(int[] A, int n) {
5
countingSort(A);
6
return A;
7
}
8
9
public void countingSort(int[] arr) {
10
int[] tempArr = new int[arr.length];// 临时数组
11
int[] timesArr;// 统计每个元素出现的次数,放入到对应的桶中
12
int range;// 统计这一组的范围,得出需要多少个桶
13
int max = arr[0];
14
int min = arr[0];
15
for (int a : arr) {
16
if (a > max)
17
max = a;
18
if (a < min)
19
min = a;
20
}
21
range = max - min + 1;// 得出极值差,为了减小临时数组(统计各元素出现的次数)的长度
22
timesArr = new int[range];
23
24
for (int i = 0; i < arr.length; i++) {
25
timesArr[arr[i] - min]++;
26
}
27
for (int i = 1; i < timesArr.length; i++) {// 得到所有元素的大小上的总体顺序
28
timesArr[i] += timesArr[i - 1];
29
}
30
for (int i = 0; i < arr.length; i++) {// 将arr中元素的位置顺序对应到临时数组中
31
int position = timesArr[arr[i] - min];// 得到arr[i]这个元素在整体上的位置
32
tempArr[--position] = arr[i];// 根据上面的位置,将该元素放入到临时数组中
33
timesArr[arr[i] - min]--;
34
}
35
for (int i = 0; i < arr.length; i++) {
36
arr[i] = tempArr[i];
37
}
38
}
39
}
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
时间: 2024-10-16 16:58:12