计数排序java实现

计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,其中k为某个整数,当k=O(n)时,排序的运行时间为θ(n)。

计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。根据这个思想,对于一个A[1…n]的数组,计数排序可按如下步骤进行:

  1. 定义一个数组B[1…n],用于存放最终排序的A中的元素;
  2. 计算出数组A中的最大值k;
  3. 定义数组C[0…k],用于存放A中元素的计数;
  4. 对数组A中的元素进行计数,并将A中元素的计数放到C中以该元素为下标的位置;
  5. 计数完成后,对C中的元素进行加总,使得C[i]=C[i]+C[i-1];
  6. 最后,根据C中的结果将A中对应的元素放置到B中对应的位置。

下图展示了计数排序的运行过程:
在这里插入图片描述
java实现如下:

    /*** 计数排序** @param nums 待排序数组*/public void countingSort(int[] nums) {// 定义临时数组用于存放排序后的结果int[] tempResult = new int[nums.length];// 计算数组中的最大值,用于定义计数数组int max = Integer.MIN_VALUE;for (int num : nums) {max = Math.max(max, num);}// 定义计数数组,并开始计数int[] count = new int[max + 1];for (int num : nums) {count[num] += 1;}// 计算对于数组中的每一个数字k,小于等于k的个数for (int j = 1; j <= max; j++) {count[j] += count[j - 1];}// 将每个元素放到结果数组中正确排序的位置for (int j = nums.length - 1; j >= 0; j--) {tempResult[count[nums[j]] - 1] = nums[j];count[nums[j]]--;}// 将结果数组复制到原数组System.arraycopy(tempResult, 0, nums, 0, nums.length);}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ON1 Photo RAW 2024 for Mac——专业照片编辑的终极利器

ON1 Photo RAW 2024 for Mac是一款专为Mac用户打造的照片编辑器&#xff0c;以其强大的功能和易用的操作&#xff0c;让你的照片编辑工作变得轻松愉快。 一、强大的RAW处理能力 ON1 Photo RAW 2024支持大量的RAW格式照片&#xff0c;能够让你在编辑过程中获得更多的自由度和更…

Django ORM 执行复杂查询的技术与实践

概要 Django ORM&#xff08;Object-Relational Mapping&#xff09;是 Django 框架的核心组件之一&#xff0c;提供了一种高效、直观的方式来处理数据库操作。尽管简单查询在 Django ORM 中相对容易实现&#xff0c;但在面对复杂的数据请求时&#xff0c;需要更深入的了解和技…

【转】OAK-D双目相机进行标定及标定结果说明

编辑&#xff1a;OAK中国 首发&#xff1a;A. hyhCSDN 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容来自用户的分享&#xff0c;如有疑问请与原作者交流&#xff01; ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手君。 近期在CSDN刷…

Centos7使用rpm安装mysql 5.7.43

Centos7使用rpm安装mysql 5.7.43 1、下载rpm包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar2、解压并安装 tar xf mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar yum -y install mysql-*3、按需修改mysql配置 #注意&a…

三十分钟学会Linux的基本操作

GNU/Linux GNU项目是由Richard Stallman发起的自由软件运动&#xff0c;旨在创建一个完全自由的操作系统。虽然GNU项目已经开发了大量的系统组件和工具&#xff0c;但它一直缺少一个完整的操作系统内核。在这时Linus Torvalds开发了Linux内核&#xff0c;并将其发布为自由软件…

Latex数学符号查表

摘抄自“《一份&#xff08;不太&#xff09;简短的 LATEX 2ε 介绍》”&#xff0c;来自该网站http://mirrors.cqu.edu.cn/CTAN/info/lshort/chinese/lshort-zh-cn.pdf

Nginx模块开发之http过滤器filter

文章目录 什么是过滤模块Nginx相关数据结构介绍ngx_module_t的数据结构ngx_http_module_t数据结构ngx_command_s数据结构 相关宏定义filter&#xff08;过滤器&#xff09;实现Nginx模块开发流程Nginx 模块执行具体实现流程create_loc_confmerge_loc_confpostconfiguration修改…

连线星图:全面了解星图地球数据云!

我们在今年的双11专场直播中&#xff0c;有幸邀请到了星图地球的嘉宾与我们连线&#xff0c;为大家作了一场精彩的分享。 这里&#xff0c;首先感谢星图地球对水经注的大力支持&#xff01; 现在&#xff0c;我们将嘉宾分享的内容进行简单整理&#xff0c;并以图文的方式与大家…

Python推导式

python推导式是一种独特的数据处理方式&#xff0c;可以从一个数据序列构建到另一个新的数据序列的结构体。 Python支持各种数据结构的推导式&#xff1a; 1. 列表&#xff08;list&#xff09;推导式 [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] or …

2023年11月25日(星期六)骑行三家村

2023年11月25日 (星期六) 骑行三家村(赏红杉林&#xff09;&#xff0c;早8:30到9:00&#xff0c; 大观公园门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#xff0c;南…

Threejs_12 物体阴影的实现

所以在Threejs的画布世界之中&#xff0c;一个物体有自己的影子呢&#xff1f; 阴影效果的实现 你需要先知道在threejs世界中&#xff0c;有哪些灯光或者材质是可以产生阴影效果的 环境光没有阴影 平行光有阴影(太阳) 点光源有阴影(灯泡) 聚光灯有阴影(手电筒) 平面光源没有…

基于单片机直流电机调速(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、转速值送到液晶1602显示。 3、按键设加减速&#xff0c;开始暂停、正反转。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 en0; rw0; write_com(0x01); //lcd初始化 write_com(0x38)…