当前位置: 首页 > news >正文

计数排序

目录

计数排序原理和步骤:

        完整代码实现:


计数排序原理和步骤:

         当一段数据比较集中在一个范围,比如 98,95,98,91,90,93,94,97,93,99,95,92;这段数据都集中在90 ~ 99 之间,那么使用计数排序来解决排序问题很方便快捷。

        第一步:

        先得到原始数组的最大值 和最小值的差值 a 。建立一个  a + 1 大小的计数数组。

        第二部:

        遍历原始数组,得到的原始数组的元素大小作为 计数数组的下标,并在计数数组对应下标位置元素大小加1,直到遍历完原始数组。

        第三步:

        遍历计数数组,给到原始数组。

        代码:

public static void countSort(int[] arr) {

        //取得原始数组最大值和最小值
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] < min) {
                min = arr[i];
            }
            if(arr[i] > max) {
                max = arr[i];
            }
        }

        //建立计数数组
        int len = max - min + 1;
        int[] countArray = new int[len];


        //遍历原始数组
        for (int i = 0; i < arr.length; i++) {
            int index = arr[i];
            countArray[index]++;
        }

        //遍历计数数组给到原始数组
        int k = 0;
        for (int i = 0; i < countArray.length; i++) {
            while(countArray[i] != 0) {
                arr[k] = i;
                k++;
                countArray[i]--;
            }
        }
    }

        到这里,起始代码还没完全写好,如果是很大的数字范围,比如 90 ~ 99这种,就会出现错误,所以,在此基础上改成:

        

        这样原始数组原来的值先减去最小值得到的下标,之后在计数数组给回原始数组时在次加上最小值就能确保正常功能。 

        完整代码实现:

public static void countSort(int[] arr) {

        //取得原始数组最大值和最小值
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] < min) {
                min = arr[i];
            }
            if(arr[i] > max) {
                max = arr[i];
            }
        }

        //建立计数数组
        int len = max - min + 1;
        int[] countArray = new int[len];


        //遍历原始数组
        for (int i = 0; i < arr.length; i++) {
            int index = arr[i]-min;
            countArray[index]++;
        }

        //遍历计数数组给到原始数组
        int k = 0;
        for (int i = 0; i < countArray.length; i++) {
            while(countArray[i] != 0) {
                arr[k] = i+min;
                k++;
                countArray[i]--;
            }
        }
    }

        计数排序是稳定的。

相关文章:

  • 用pytorch实现一个简单的图片预测类别
  • 字符设备驱动开发
  • SpringBoot Bug 日志
  • python_excel批量插入图片
  • 数据结构——队列、哈希存储(2025.2.11)
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十二节】
  • Git 中的 author 和 committer 有什么区别
  • DeepSeek 从入门到精通学习指南,2025清华大学《DeepSeek从入门到精通》正式发布104页pdf版超全解析
  • 通过用户名和密码登录服务器有哪些方法
  • 基于语义语言的语义通信(SemCom)理论:语义编码、语义解码、CSED 及语言利用
  • 从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
  • 数据结构-二叉树经典OJ题
  • Dify报错model schema not found
  • 视频编解码标准中的 Profile 和 Level
  • 用大模型学大模型03-数学基础 概率论
  • JAVA EE初阶 - 预备知识(一)
  • 解锁ASP4644电源芯片RUN引脚的秘密
  • Easy系列PLC 线性变换功能块(模拟量相关功能块汇总)
  • 网络IP地址冲突故障,快速解决方案!
  • MySQL —— 事务
  • 习近平会见塞尔维亚总统武契奇
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 洞天寻隐·学林纪丨玉洞桃源:仇英青绿山水画中的洞天与身体
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级
  • 杭温高铁、沪苏湖高铁明起推出定期票和计次票,不限车次执行优惠折扣
  • 中国难以承受高关税压力?外交部:任何外部冲击都改变不了中国经济基本面