public IList<int> CountSort(int[] nums) {int max = nums.Max();int min = nums.Min();//申请一个足够容纳最小值到最大值的数组,数组的索引即是具体的值,数组的值为该索引出现的次数,容易浪费内存int[] mark = new int[max - min + 1];//记录每个值出现的次数foreach (var num in nums){++mark[num - min];}int startIdx = 0;//遍历记录将索引从小到大放回数组for (int i = 0; i < mark.Length; i++){while (mark[i]-- > 0){nums[startIdx++] = i + min;}}return nums;}
