java实现计数排序

 图解

计数排序是一种线性时间复杂度的排序算法,它不基于比较排序,而是根据待排序序列中元素的值来进行排序。

具体的过程如下:

  1. 统计序列中每个元素出现的个数,得到一个计数数组count。其中,count[i]表示待排序序列中值为i的元素出现的次数。

  2. 对计数数组做累加操作,得到一个前缀和数组sum。其中,sum[i]表示待排序序列中所有小于等于i的元素的个数。

  3. 根据sum数组中元素的值,将待排序序列中的元素放到相应的位置上。具体做法是:对于待排序序列中的元素a[i],找到sum[a[i]],将a[i]放到输出序列的sum[a[i]]-1位置上,然后将sum[a[i]]-1减1。

计数排序的时间复杂度为O(n+k),其中n为待排序序列的长度,k为待排序序列中元素的取值范围。

需要注意的是,计数排序只适用于元素取值范围不大的情况下,否则空间复杂度会很高。此外,计数排序是一种稳定排序算法,即具有相同值的元素在排序后相对位置不会发生改变。

计数排序是一种非比较排序方式,它的基本思想是统计每个元素在序列中出现的次数,然后根据统计信息将原序列中的元素排列到正确的位置上。以下是Java实现计数排序的示例代码:

public class CountingSort {
    public static void countingSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }

        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {   // 找出数组中的最大值和最小值
            if (arr[i] > max) {
                max = arr[i];
            }
            if (arr[i] < min) {
                min = arr[i];
            }
        }

        int[] count = new int[max - min + 1];  // 计数数组
        for (int i = 0; i < arr.length; i++) {
            count[arr[i] - min]++;   // 统计元素出现次数
        }

        int index = 0;
        for (int i = 0; i < count.length; i++) {  // 将元素按计数数组中的统计信息排序
            while (count[i]-- > 0) {
                arr[index++] = i + min;
            }
        }
    }
}

在主函数中,可以通过以下方式使用计数排序的函数:

int[] arr = {5, 3, 7, 1, 8, 2, 6, 4};
CountingSort.countingSort(arr);
System.out.println(Arrays.toString(arr));

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/147397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业的SRM系统全流程管理服务

一、什么是SRM系统 SRM系统&#xff0c;即供应商关系管理&#xff0c;是供应链管理中的重要组成部分&#xff0c;帮助企业与供应商建立、维护和改善业务关系&#xff0c;以实现双方共赢。本文将从供应商寻源到合同签订、订单履行、到付款及供应商评价等环节&#xff0c;阐述SR…

【开源】基于Vue.js的超市自助付款系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容2.1 商品类型模块2.2 商品模块2.3 超市账单模块 三、界面展示3.1 登录注册模块3.2 超市商品类型模块3.3 超市商品模块3.4 商品购买模块3.5 超市账单模块 四、部分源码展示4.1 实体类定义4.2 控制器接口 五、配套文档展示…

.pcd文件格式

更详细的格式介绍可以查看我的这篇博客 『Open3D』安装与点云格式通识_open3d安装_NNNNNathan的博客-CSDN博客文章浏览阅读1.9k次。介绍了open3d的安装和当前适用与存储点云信息的文件格式&#xff0c;并详细介绍了pcd与ply两种格式。_open3d安装https://blog.csdn.net/qq_413…

【QT系列教程】之二创建项目和helloworld案例

文章目录 一、QT创建项目1.1、创建项目1.2、选择创建项目属性1.3、选择路径和项目名称1.4、选择构建项目类型1.5、布局方式1.6、翻译文件&#xff0c;根据自己需求选择1.7、选择套件1.8、项目管理&#xff0c;自行配置1.9、配置完成&#xff0c;系统自动更新配置 二、QT界面介绍…

Payshield 10K是什么意思?有什么作用?

PayShield 10K是一种支付安全产品&#xff0c;由数字货币和法币混合而成的数字货币产品。它的意思是保护商家在交易过程中可能遭受的损失。这种产品的主要作用是保护数字货币支付系统的安全&#xff0c;并确保商家在交易过程中获得他们应得的收益。 PayShield 10K具有以下特点和…

Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!

目录 前言&#xff1a; 一、包子1.0 二、Bun 是一个一体化工具包 为什么包子存在 二、Bun 是一个 JavaScript 运行时 Node.js 兼容性 速度 TypeScript 和 JSX 支持 ESM 和 CommonJS 兼容性 网络 API 热重载 插件 Bun&#xff1a;全能的工具包 Bun 为什么会出现&…

AI创作系统ChatGPT网站源码+支持最新GPT-Turbo模型+支持DALL-E3文生图/AI绘画源码

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

ssm047网上服装销售系统+jsp

ssm047网上服装销售系统jsp 交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

用 Raspberry Pi 5 构建文件服务器(NAS)

系列文章目录 文章目录 系列文章目录前言一、软件设置二、存储器设置三、配置总结 前言 2023 年 11 月 13 日 本-埃弗拉德 这个 #MagPiMonday 周一&#xff0c;学习如何利用 Raspberry Pi 5 的新功能制作更好的 NAS。本教程是 MagPi 推出的 Raspberry Pi 5 特辑的一部分。 M.…

u系 kdump查看配置

V4 桌面&#xff1a; 如果能上外网配置网络源安装软件包&#xff1a; 会自动安装以下几个包&#xff08;不能连接外网直接安装一下几个包即可&#xff09;&#xff1a; 查看kdump配置&#xff1a; Kdump-config show 可以看到USE_KDUMP1 &#xff0c;生成的vmcore文件在/var…

Apache Airflow (七) :DAG调度周期设置

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer&#xff1a;表现层状态转移)是一种软件架构风格&#xff0c;其核心是面向资源的一种设计。何为面向资源&#xff0c;意思是网络上的所有事物都可以抽象为资源&#xff0c;而每个资源都有唯一的资源标识&…

【rl-agents代码学习】02——DQN算法

文章目录 Highway-env Intersectionrl-agents之DQN*Implemented variants*:*References*:Query agent for actions sequence探索策略神经网络实现小结1 Record the experienceReplaybuffercompute_bellman_residualstep_optimizerupdate_target_network小结2 exploration_polic…

(.htaccess文件特性)[MRCTF2020]你传你呢 1

题目环境&#xff1a; 不难看出是一道文件上传漏洞 上传一句话木马文件burpsuite进行抓包<?php eval($_POST[shell]);?> 命名为PHP文件格式 Repeater进行重放 尝试了其它后缀进行绕过都没有成功 通过 application/x-php内容类型&#xff0c;可以看出被识别出是PHP文件&…

模拟接口数据之使用Mock方法实现(vite)

文章目录 前言一、安装依赖mockjs 安装vite-plugin-mock 安装新增mock脚本 二、vite插件配置vite-plugin-mockvite.config.ts 引入vite-plugin-mock 三、新建mock数据新建mock目录env目录新建.env.mock文件 四、使用mock数据定义接口调用接口 如有启发&#xff0c;可点赞收藏哟…

μC/OS-II---互斥信号量管理1(os_mutex.c)

目录 背景&#xff1a;优先级反转问题互斥信号量管理互斥信号量创建互斥信号量删除互斥信号量获取/等待 背景&#xff1a;优先级反转问题 在高优先级任务等待低优先级任务释放资源时&#xff0c;第三个中等优先级任务抢占了低优先级任务。阻塞时间是无法预测的&#xff0c;可能…

【ROS导航Navigation】二 | 坐标系 | 定位 | 导航约束

目录 致谢&#xff1a;ROS赵虚左老师 一、通过里程计定位 二、通过传感器定位 三、坐标系变换 四、导航约束条件 1.硬件 2.软件 致谢&#xff1a;ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、…

聚观早报 |英伟达发布H200;夸克发布自研大模型

【聚观365】11月15日消息 英伟达发布H200 夸克发布自研大模型 iQOO 12系列开启销售 红魔9 Pro配置细节 禾赛科技第三季度营收4.5亿元 英伟达发布H200 全球市值最高的芯片制造商英伟达公司&#xff0c;正在升级其H100人工智能处理器&#xff0c;为这款产品增加更多功能&am…

《网络协议》07. 其他协议

title: 《网络协议》07. 其他协议 date: 2022-10-07 18:24:02 updated: 2023-11-15 08:00:52 categories: 学习记录&#xff1a;网络协议 excerpt: IPv6、WebSocket、WebService&#xff08;SOAP&#xff0c;WSDL&#xff09;、HTTPDNS、FTP、邮件&#xff08;SMTP&#xff0c;…

PostgreSQL基本操作

目录 1.源码安装PostgreSQL 1.1.前置条件&#xff08;root下操作&#xff09; 1.1.1.卸载yum安装的postgresql 1.1.2.创建postgres用户 1.1.3.安装部分依赖 1.1.4.源码安装uuid 1.2.安装PostgreSQL 1.2.1.使用postgres用户管理PostgreSQL 1.2.2.下载解压postgres12源码…