计数排序(Counting Sort)
动图演示地址(https://www.cs.usfca.edu/~galles/visualization/CountingSort.html)
(动图里面多了一步累加和)
代码结构
源码
前置条件:父接口和测试类从上篇文章获取(https://blog.csdn.net/jt781861965/article/details/117051443)
package suanfa.paixu;
public class CountSort implements Sort {
public static void main(String[] args) {
Test.test(new CountSort());
}
public void sort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
min = Math.min(min, arr[i]);
max = Math.max(max, arr[i]);
}
int[] help = new int[max - min + 1];
for (int i = 0; i < arr.length; i++) {
help[arr[i] - min]++;
}
int index = 0;
for (int i = 0; i < help.length; i++) {
while (help[i]-- > 0) {
arr[index++] = i + min;
}
}
}
}