计数排序

news2024/9/22 19:30:54

计数排序

排序步骤

1、以最大值和最小值的差值加一为长度创建一个新数组

2、将索引为0对应最小值,索引为1对应最小值+1,索引为2对应最小值+2,以此类推,将索引对应最小值到最大值之间所有的值

3、遍历一遍,遇到一个数字则在对应的索引位置上加一

4、最终输出时按照新数组从小到大输出,数组上的值表示该数出现的次数,就输出几次

解析说明

计数排序不是比较排序,排序的速度快于任何比较排序算法。

当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。

由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。

计数排序代码 

import org.junit.Test;

public class CountSort {
    @Test
    public void test() {
        int[] arr = new int[]{12, 15, 4 ,8,15,4, 5, 35, 35};

        countSort(arr);
    }

    public static void countSort(int[] arr) {
        int[] count = new int[getMax(arr) - getMin(arr) + 1];
        for (int i = 0; i < arr.length; i++) {
            count[arr[i] - getMin(arr)]++;
        }

        for (int i = 0; i < count.length; i++) {
            for (int j = 0; j < count[i]; j++) {
                System.out.print(i+getMin(arr)+" ");
            }
        }
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }

    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        return min;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hcip第一天——复习静态路由习题

目录 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试 要求 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试

SpringBoot【原理分析、YAML文件、SpringBoot注册web组件】(二)-全面详解(学习总结---从入门到深化)

目录 SpringBoot原理分析_核心注解 YAML文件_配置文件介绍 YAML文件_自定义配置简单数据 YAML文件_自定义配置对象数据 YAML文件_自定义配置集合数据 YAML文件_读取配置文件的数据 使用ConfigurationProperties读取 YAML文件_占位符的使用 YAML文件_配置文件存放位置及优…

react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 在现…

【电路原理学习笔记】第3章:欧姆定律:3.4 电阻的计算

第3章&#xff1a;欧姆定律 3.4 电阻的计算 电阻相关欧姆定律公式&#xff1a; R V I R\frac{V}{I} RIV​ 【例3-16】在图3-13所示的电路中&#xff0c;电阻为多少时&#xff0c;电池的电流才为3.08A&#xff1f; 【答】 R V I 12 V 3.08 A 3.90 Ω R\frac{V}{I}\frac{1…

AI大模型的现状与发展

AI大模型的现状与发展 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1f604; ✨座右铭…

leetcode 108. 将有序数组转换为二叉搜索树

2023.7.16 由数组构造二叉搜索树地问题&#xff0c;本题可以借鉴从中序与后序遍历序列构造二叉树 这道题&#xff0c;这类题本质就是寻找分割点&#xff0c;分割点作为当前节点&#xff0c;然后递归左区间和右区间。 下面直接看代码&#xff1a; class Solution { public:Tree…

电子器件系列43:贴片led、发光二极管

干货&#xff01;发光二极管的全面解读 二极管、发光二极管参数详解_sam-zy的博客-CSDN博客 对几个型号的贴片led进行参数解读&#xff1a; ols-330 特性&#xff1a; 带镜头&#xff0c;从PCB背面安装 视角40 贴片1206 尺寸&#xff1a;3.2(长)x1.6(宽)x1.9(高)mm …

明代元素时装小姐姐【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置&#xff1a; 模型&#xff1a;chilloutmix_NiPrunedFp32Fix Lora&#xff1a;hanfu_ming 采样迭代步数&#xff08;steps&#xff09;: 40 采样…

故障排错篇之OSPF协议

一、OSPF邻居建立不成功 1、从理论上判断问题的所在 1.1、检查邻居两端的接口物理和协议状态是否UP&#xff0c;状态是否稳定&#xff0c;接口是否有丢包&#xff0c;两边互ping大包是否能通 若物理接口不Up或是不稳定&#xff08;有振荡现象&#xff09;&#xff0c;请排查…

NodeJS 文件操作封装 ②①

文章目录 前言导入模块创建文件递归删除文件&文件夹下载写入图片根据URL路劲返回Base64图片链接根据URL路劲异步返回Base64图片链接封装代码暴露模块总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦…

【java爬虫】使用selenium获取某宝联盟淘口令

上一篇文章我们已经介绍过使用selenium获取优惠券基本信息的方法 (15条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 本文将在上一篇文章的基础上更进一步&#xff0c;获取每个优惠券的淘口令&#xff0c;毕竟我们只有复制淘口令才能在APP里面获取优惠…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架&#xff0c;它允许开发人员使用多种编程语言&#xff08;包括Python&#xff09;来编写自动化测试脚本。Appium框架提供了一套API和工具&#xff0c;可以与移动设备进…

C语言——指针详解(初阶)

轻松学会C语言指针 前言&#xff1a;一、指针是什么&#xff1f;1.1 指针是什么&#xff1f;1.2 指针变量1.3 总结 二、指针和指针类型2.1指针-整数2.2 指针的解引用 三、野指针3.1野指针的成因3.2如何避免野指针 四、指针运算4.1 指针-整数4.2指针-指针4.3指针的关系运算 五、…

【学会动态规划】不同路径(5)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

Delete `␍`eslint(prettier/prettier)报错的终极解决方案

1.背景 在进行代码仓库clone打开后&#xff0c;vscode报错全屏的 Delete ␍eslint(prettier/prettier)问题 2. 解决方案&#xff1a; 1.vscode直接转化 好处&#xff1a;直接转化当前页面的报错 坏处&#xff1a;每个界面都需要来一遍 2.设置git配置 好处&#xff1a;一…

竞赛信息管理系统——SSM

目录 一、项目简介 二、前置配置 1、创建数据库 2、编写application.yml文件 三、公共基础类 1、自定义登录拦截器类 2、自定义拦截规则 3、统一数据返回类 4、统一异常处理类 5、工具类 a、密码工具类 b、时间工具类 6、全局变量 四、用户模块 1、定义…

echarts环形图两层

1、实现效果 环形图&#xff0c;有两层环形&#xff0c;扇形之间有间隔&#xff0c;中间是标题&#xff0c;图例是自定义图片 2、实现 在template里写一个盒子放图表 <div class"chartMachineStyle" ref"chartMachine"></div>在style里设置盒…

状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

从今天起&#xff0c;我们开始学习状态模式。在实际的软件开发中&#xff0c;状态模式并不是很常用&#xff0c;但是在能够用到的场景里&#xff0c;它可以发挥很大的作用。从这一点上来看&#xff0c;它有点像我们之前讲到的组合模式。 可以简短的回顾一下组合模式&#xff1a…

Windows cmd窗口下的代码页

查看当前的活动代码页 在cmd窗口下执行命令chcp可以查看当前的活动代码页&#xff1a; 临时修改活动代码页 在cmd窗口下执行命令chcp [nnn]&#xff0c;可以临时修改活动代码页&#xff08;窗口关闭后修改就失效了&#xff09;&#xff0c;其中[nnn]表示具体的代码页标识符…