计数排序模板

   日期:2020-05-17     浏览:99    评论:0    
核心提示:遍历数组统计最小值min、最大值max是多少建立一个数组cntArray长度为max - min + 1统计每个数出现的次数遍历cntArray,对于cntArray中的每个数所对应的个数放入原数组中public class CounterSort { public static void main(String[] args) { CounterSort counterSort = new CounterSort(); int[] arr = {5, 1.
  1. 遍历整个待排序数组找出最小值min、最大值max
  2. 建立一个统计数组cntArray(用于统计待排序数组中每个数出现的频率)长度为max - min + 1
  3. 遍历整个待排序数组统计每个数出现的频率
  4. 依次遍历从min ~ max的数,找到每个数的频率ct并将该数放ct次到待排序数组中
public class CounterSort {
    public static void main(String[] args) {
        CounterSort counterSort = new CounterSort();
        int[] arr = {5, 1, 1, 2, 0, 0};
        counterSort.counterSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static int[] sortArray(int[] nums) {
        counterSort(nums);
        return nums;
    }

    private static void counterSort(int[] nums) {
        int min = 0x7fffffff, max = 0x80000000;
        for (int num : nums) {
            min = Math.min(min, num);
            max = Math.max(max, num);
        }
        int[] cnt = new int[max - min + 1];
        for (int num : nums) {
            cnt[num - min]++;
        }
        int idx = 0;
        for (int num = min; num <= max; num++) {
            int ct = cnt[num - min];
            while (ct > 0) {
                nums[idx++] = num;
                ct--;
            }
        }
    }
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服