package cn.sehzh;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.Random;
public class CountingSort {
private static int MAX = 1000;
public static void main(String[] args) {
// 随机生成20个不大于1000的数
int[] a = new int[20];
int[] b = new int[20];
int[] c = new int[MAX];
randomArray(a, MAX);
// 打印排序前的结果
System.out.println(Arrays.toString(a));
// 进行计数排序
for (int i = 0; i < a.length; i++) {
c[a[i]]++;
}
for (int i = 1; i < c.length; i++) {
c[i] = c[i] + c[i - 1];
}
for (int i = a.length - 1; i >= 0; i--) {
b[c[a[i]] - 1] = a[i];
c[a[i]]--;
}
// 打印排序后的结果
System.out.println(Arrays.toString(b));
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
static void randomArray(int[] a, int max) {
Random random = new Random(LocalTime.now().toSecondOfDay());
for (int i = 0; i < a.length; i++) {
a[i] = random.nextInt(max);
}
}
}
输出:
[180, 749, 299, 787, 751, 811, 615, 53, 447, 479, 147, 716, 858, 669, 403, 144, 926, 567, 209, 435]
[53, 144, 147, 180, 209, 299, 403, 435, 447, 479, 567, 615, 669, 716, 749, 751, 787, 811, 858, 926]
[53, 144, 147, 180, 209, 299, 403, 435, 447, 479, 567, 615, 669, 716, 749, 751, 787, 811, 858, 926]