public class _CountSort { public static void SortNum(int [] arr){ int min=arr[0],max=arr[0]; int []sortedArr=new int[arr.length]; //找到待排数据的范围 for(int i:arr){ if(i<min) min=i; else if(i>max) max=i; } int count[]=new int[max-min+1]; //统计每一个带牌数据出现的次数 for(int i:arr){ count[i-min]++; } //统计每一个数据之前一共出现了多少个数据,就是知道每一个数据的最后一个元素的位置 for (int i = 1; i < count.length; i++) { count[i]=count[i-1]+count[i]; } //从后往前找,为了使得排序结果是稳定的 for(int i=arr.length-1;i>=0;i--){ sortedArr[--count[arr[i]-min]]=arr[i]; } System.arraycopy(sortedArr,0,arr,0,arr.length); } }