1.确定数字范围
//数字范围为0到9
int[] arr = {2, 4, 2, 3, 7, 1, 1, 0, 0, 5, 6, 9, 8, 5, 7, 4, 0, 9};
以 以上数组为例,可以看到范围为0-9;
2.创建一个与范围大小相同的数组
int[] count = new int[10];
3.遍历数组元素,每出现一次,让count数组对应的下标加一
for (int i = 0 ; i < arr.length ; i ++){
count[arr[i]] ++;
}
这样我们就知道那个数字在数组中出现的次数了
4.按照顺序依次将元素给原数组一样大的数组
for (int i = 0 ,j = 0; i < count.length ; i ++){
while (count[i] -- > 0){
result[j ++] = i;
}
}
5.完整代码
//计数排序 计数数组
public static void main(String[] args) {
//数字范围为0到9
int[] arr = {2, 4, 2, 3, 7, 1, 1, 0, 0, 5, 6, 9, 8, 5, 7, 4, 0, 9};
int[] result = sort(arr);
for (int i : result){
System.out.println(i);
}
}
public static int[] sort(int[] arr){
int[] result = new int[arr.length];
int[] count = new int[10];
for (int i = 0 ; i < arr.length ; i ++){
count[arr[i]] ++;
}
for (int i = 0 ,j = 0; i < count.length ; i ++){
while (count[i] -- > 0){
result[j ++] = i;
}
}
return result;
}