10计数排序
基本思想:设计一个比元素组中最大值大1的数组,将所有元素作为新数组的下标进行填入,最后按照新数组从小到大顺序输出即可。
讲解:
//创建一个名为Count_sort的方法,传入待排数组a及其大小
public static void Count_sort(int a[],int len){
//假设最大值max为a[0],最小值min也是a[0]
int max = a[0],min = a[0];
//遍历所有元素,找出数组中的最大值max和最小值min
for(int i = 0;i < len;i++){
if(a[i] > max){
max = a[i];
}
if(a[i] < min){
min = a[i];
}
}
//变量range为最大值 - 最小值 + 1,即需要的新数组大小
int range = max - min + 1;
//创建新数组countArr,大小为range
int[] countArr = new int[range];
//遍历所有元素
for(int i = 0;i < len;i++){
//将当前元素 - 最小值元素min的结果作为新数组的下标,进行+1
countArr[a[i] - min]++;
}
//定义其实位置j=0
int j = 0;
//遍历整个新数组
for(int i = 0;i < range;i++){
//while循环条件:只要countArr数组中的值不为0
while(countArr[i]-- != 0){
//就将当前的i值加上min值 = 原数组中的值
//再将这个初始值依次放入原数组a中
a[j] = i + min;
//j + 1,代表原数组a的下一个空位
j++;
}
}
}