package Sort;
import java.lang.reflect.Array;
import java.util.Arrays;
// 计数排序, 空间换时间
// 需要知道序列的最大值和最小值, 开辟一个数组,索引为元素的值, 值为元素出现的次数, 然后将数组按出现的次数依次拷回到原数组
// n+k
public class CountSort
{
public static void main(String[] args)
{
int[] arr = {5, 5, 4, 4, 3, 2, 1};
int max = arr[0];
int min = arr[0];
for (int i=0;i<arr.length;i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min= arr[i];
}
}
int[] tmp = new int[max - min+1+1];
for(int i=0;i<arr.length;i++) {
tmp[arr[i]] ++;
}
System.out.println(Arrays.toString(tmp));
int k =0;
for (int i=1 ; i< tmp.length;i++) {
while(tmp[i]-- > 0) {
arr[k++] = i;
}
}
System.out.println(Arrays.toString(arr));
}
}