计数排序(稳定版):朴素版的计数排序稳定版的计数排序可以保证同值元素在遍历前后不会错乱顺序。
import java.util.Arrays;
public class wendingMain {
public static void main(String[] args) {
int[] arr = {52,59,51,57,56,53,55,54,58,66};
System.out.println(Arrays.toString(countSort(arr)));
}
public static int[] countSort(int[] arr){
//获取数组最大值
int max = arr[0];
//获取数组最小值
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max){
max = arr[i];
}
if (arr[i] < min){
min = arr[i];
}
}
//定义计数数组
int[] countArr = new int[max-min+1];
//统计元素出现的次数
for (int i = 0; i < arr.length; i++) {
countArr[arr[i]-min]++;
}
//变换统计数组元素
int sum = 0;
for (int i = 0; i < countArr.length; i++) {
sum += countArr[i];
countArr[i] = sum;
}
//倒序遍历输入数组
int[] sortedArr = new int[arr.length];
for (int i = arr.length-1; i >= 0; i--) {
sortedArr[countArr[arr[i]-min]-1] = arr[i];
countArr[arr[i]-min]--;
}
return sortedArr;
}
}