zoukankan      html  css  js  c++  java
  • 排序算法-计数排序(Java)

    package com.rao.sort;
    
    import java.util.Arrays;
    
    /**
     * @author Srao
     * @className CountSort
     * @date 2019/12/9 14:47
     * @package com.rao.sort
     * @Description 计数排序
     */
    public class CountSort {
    
        /**
         * 计数排序
         * @param arr:要排序的数组
         * @return
         */
        public static int[] countSort(int[] arr){
            int n = arr.length;
            //先定义两个变量用来存放数组中的最大值和最小值
            int min = arr[0];
            int max = arr[0];
            for (int i = 1; i < n; i++){
                if (max < arr[i]){
                    max = arr[i];
                }
                if (arr[i] < min){
                    min = arr[i];
                }
            }
            //定义一个长度为len的数组,这样做是为了防止数组中的最小值为1000,最大值为1010
            //这样创建一个大小为10的数组就行了,不用创建大小为1010的数组,浪费空间
            int len = max - min + 1;
            //哪个数字出现了一次,就把它的数字作为下标存起来,假如1006出现了一次,就把temp[1006-1000]加一
            int[] temp = new int[len];
            for (int i = 0; i < n; i++) {
                temp[arr[i] - min]++;
            }
            int k = 0;
            //对temp进行遍历,temp[i]的值就是i出现的次数,加入temp[5]=3,说明(5+1000)出现了3次
            for (int i = 0; i < len; i++) {
                for (int j = temp[i]; j > 0; j--){
                    arr[k] = i + min;
                    k++;
                }
            }
    
            return arr;
        }
    
        public static void main(String[] args) {
            int[] arr = {3, 6, 9, 5, 0};
            System.out.println(Arrays.toString(arr));
            arr = countSort(arr);
            System.out.println(Arrays.toString(arr));
    
        }
    }

      计数排序是一种适合于最大值和最小值的差值不是不是很大的排序。

      基本思想:就是把数组元素作为数组的下标,然后用一个临时数组统计该元素出现的次数,例如 temp[i] = m, 表示元素 i 一共出现了 m 次。最后再把临时数组统计的数据从小到大汇总起来,此时汇总起来是数据是有序的。

  • 相关阅读:
    关于虚函数,构造函数,非构造函数之间的交叉调用
    关于虚函数,类的内存分布以及类的成员函数调用原理
    以数组作为形参
    opengl渲染管线梳理
    C++ struct,class的内存对齐
    关于虚函数的原理
    利用Attribute和IErrorHandler处理WCF全局异常
    HandleErrorAttribute
    Using native JSON
    iis8不支持 aspnet_regiis.exe -iru 命令的解决办法
  • 原文地址:https://www.cnblogs.com/rao11/p/12011095.html
Copyright © 2011-2022 走看看