zoukankan      html  css  js  c++  java
  • 排序计数排序

    计数排序的介绍 ​ 

           计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数  

      计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序

    计数排序的原理 ​      

       1、找出待排序的数组中最大和最小的元素;
    ​        2、统计数组中每个值为i的元素出现的次数,存入数组C的第i项;
    ​        3、对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);
    ​        4、反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。

    动态图演示


    代码演示

    /**
         * 计数排序
         *
         * @param array
         * @return
         */
        public static int[] CountingSort(int[] array) {
            if (array.length == 0) return array;
            int bias, min = array[0], max = array[0];
            for (int i = 1; i < array.length; i++) {
                if (array[i] > max)
                    max = array[i];
                if (array[i] < min)
                    min = array[i];
            }
            bias = 0 - min;
            int[] bucket = new int[max - min + 1];
            Arrays.fill(bucket, 0);
            for (int i = 0; i < array.length; i++) {
                bucket[array[i] + bias]++;
            }
            int index = 0, i = 0;
            while (index < array.length) {
                if (bucket[i] != 0) {
                    array[index] = i - bias;
                    bucket[i]--;
                    index++;
                } else
                    i++;
            }
            return array;
        }
    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    day6_redis模块和pipeline
    day6_hashlib模块
    18 MySQL数据导入导出方法与工具介绍之二
    【Vijos1264】神秘的咒语
    【Vijos1180】选课
    【vijos1234】口袋的天空
    【vijos1790】拓扑编号
    【WC2008】【BZOJ1271】秦腾与教学评估(二分,前缀和,奇偶性乱搞)
    【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
    【基础】二分算法学习笔记
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15790423.html
Copyright © 2011-2022 走看看