排序算法--计数排序
计数排序通过将元素之间的大小差别转化为数组中下标距离进行排序,数组下标距离代表两元素差,数组内的值代表这个大小的元素出现的次数
public class test {
public static int[] sort(int[] arr){
if (arr == null || arr.length == 0) {
return null;
}
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
//找出数组中的最大最小值
for(int i = 0; i < arr.length; i++){
max = Math.max(max, arr[i]);
min = Math.min(min, arr[i]);
}
//设置辅助数组大小为最大值
//辅助数组将最小值设置为下标0,从最小值到最大值之间的每一个可能出现的数字均可找到对应的下标
int help[] = new int[max];
//找出每个数字出现的次数
for(int i = 0; i < arr.length; i++){
//因为将最小值设置为0所以位置下标要减去min
int position = arr[i] - min;
help[position]++;
}
int index = 0;
for(int i = 0; i < help.length; i++) {
//while(help[i]-->0)如果help[i]>0;help[i]--并执行一次while中的代码
while (help[i]-- > 0) {
//因为help中的下标代表距离最小值的位置,所以要加上min
arr[index++] = i + min;
}
}
return arr;
}
public static void main(String[] args) {
int[] test={3,4,4,5,9,6};
int[] num = sort(test);
System.out.println(Arrays.asList(num));
}
}