行业资讯 2025年08月6日
0 收藏 0 点赞 983 浏览 1007 个字
摘要 :

文章目录 计数排序核心思想 算法描述 计数排序动态图解 Java实现计数排序代码  总结 本文重点讲解Java实现计数排序经典代码和算法思路。 计数排序核心思想 计数排序的……




本文重点讲解Java实现计数排序经典代码和算法思路

计数排序核心思想

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

计数排序就是一个排序时不比较元素大小的排序算法。

对一定范围内的整数排序的时候速度非常快,优于其他算法。同时局限性也比较大,只能对于整数进行排序,并且待排序元素分布较连续,跨度小的情况。

如果一个数组里所有元素都是整数,且在0—k以内,那对于这个数组的每个元素来说,如果能知道数组里有多少项小于或等于该元素,就能准确地给出该元素在排序后的数组的位置。

算法描述

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

计数排序动态图解

Java实现计数排序经典代码和算法思路

Java实现计数排序代码

public static int[] countingSort(int[] arr) {
    int minV = arr[0], maxV = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (minV > arr[i]) {
            minV = arr[i];
        }
        if (maxV < arr[i]) {
            maxV = arr[i];
        }
    }
    int gap = maxV - minV + 1;
    int[] countArr = new int[gap];
    for (int i = 0; i < arr.length; i++) {
        countArr[arr[i] - minV] += 1;
    }
    for (int i = 1; i < gap; i++) {
        countArr[i] += countArr[i - 1];
    }
    int[] result = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        /**
         * countArr[arr[i] - minV] - 1 当前arr[i]可以放的最右的位置,每放一次往前移一位
         */
        result[countArr[arr[i] - minV] - 1] = arr[i];
        countArr[arr[i] - minV] -= 1;
    }
    return result;
}

 总结

以上就是Java实现计数排序经典代码和算法思路的全部内容,希望对你有帮助!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9745.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号