class Solution {
//计数排序
public int[] sortArray(int[] nums) {
//判空及防止数组越界
if(nums==null||nums.length<=1) return nums;
//找最大值、最小值
int max=0;
int min=0;
for(int num:nums){
if(num>max){
max=num;
}
if(num<min){
min=num;
}
}
//确定计数范围
int range=max-min+1;
//建立长度为 range 的数组,下标 0~range-1 对应数字 min~max
int[] counting=new int[range];
//计数
for(int element:nums){
//将每个整数出现的次数统计到计数数组中对应下标的位置
//这里需要将每个元素减去 min,才能映射到 0~range-1 范围内
counting[element-min]++;
}
//记录下标
int precount=0;//记录前面比自己小的数字的总数
for(int i=0;i<range;i++){
//当前的数字比下一个数字小,累计到 preCounts 中
precount+=counting[i];
Java实现:计数排序
于 2022-04-22 14:12:22 首次发布