//和前面写的计数排序相比,这种方式并没有开辟新数组B存A的排序结果,所以只用到C这个数组
//C这个数组的长度是k,k是A数组中元素的变化范围[o,k] 当k远远小于n的时候,例如很多很多个数范围都在0-100之间,k相比n可以忽略,相当于空间复杂度O(k)或者O(1)
//缺点是A中的元素排序结果是直接通过赋予下标i的方式,但是如果原数组A中除了关键字(整数)外,还有其他辅助信息,那么无法将这些辅助信息业放到排序结果中
package com.java.ly2011.Semptember;
import java.util.Arrays;
public class CountSort2 {
public static void main(String[] args) {
int[] A = new int[]{2,5,3,0,2,3,0,3};
countSort(A, 10);
System.out.println(Arrays.toString(A));
}
public static void countSort(int[] A ,int k){
int[] C = new int[k];
for(int i =0;i<C.length;i++)
C[i]=0;
for(int i=0;i<A.length;i++)
C[A[i]]=C[A[i]]+1;
int j = 0;
for(int i= 0;i<C.length;i++){
for(int num =1;num<=C[i];num++){
A[j]=i;
j++;
}
}
}
}