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]

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

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

相关文章

npm封装插件打包上传后图片资源错误

问题&#xff1a; npm封装插件&#xff1a;封装的组件页面涉及使用图片资源&#xff0c;在封装的项目里调用图片显示正常&#xff1b;但是打包上传后&#xff0c;其他项目引入使用报错找不到图片资源&#xff1b;图片路径也不对 获取图片的base64方法 解决方案&#xff1a; 将…

Django debug page XSS漏洞复现_(CVE-2017-12794)

Django debug page XSS漏洞复现_(CVE-2017-12794) 复现过程 首先进入靶场环境 按照他写的&#xff0c;需要给这个变量赋值 创建一个用户&#xff0c;用弹窗做用户名 http://10.4.7.137:8000/create_user/?username<script>alert(1)</script>返回&#xff0c;然…

时间序列基础->数据标签、数据分割器、数据加载器的定义和讲解(零基础入门时间序列)

一、本文介绍 各位小伙伴好&#xff0c;最近在发时间序列的实战案例中总是有一些朋友问我时间序列中的部分对数据的操作是什么含义&#xff0c;我进行了挺多的介绍和讲解但是问的人越来越多&#xff0c;所以今天在这里单独发一篇文章来单独的讲一下时间序列中对数据的处理操作…

消息队列简介

什么是消息队列?&#xff08;Message queue&#xff0c;简称MQ&#xff09; 从字面理解就是一个保存消息的一个容器。那么我们为何需要这样一个容器呢&#xff1f; 其实就是为了解耦各个系统&#xff0c;我们来举个例子&#xff1a; 有这么一个简单的场景&#xff0c;系统A负…

机器学习—基本术语

目录 1.样本&#xff08;示例&#xff09; 2.属性 3.属性值 4.属性空间 5.样本空间 6.学习&#xff08;训练&#xff09; 7.数据集 8.测试 9.假设 10.学习器 11.标记 12.样例 13.标记空间&#xff08;样例空间&#xff09; 14.分类与回归 15.有监督学习、无监督…

msvcp140.dll丢失的解决方法、详细解析dll缺失原因及对电脑的影响

msvcp140.dll是一款Visual C Redistributable for Visual Studio 2015的运行时库&#xff0c;许多程序都需要依赖这个库才能正常运行。当msvcp140.dll丢失时&#xff0c;我们可能会遇到无法打开程序或游戏&#xff0c;甚至系统崩溃的问题。本文将详细介绍msvcp140.dll丢失的解决…

【Liunx】部署WEB服务:Apache

【Liunx】部署WEB服务:Apache 概述Apache1.介绍2.Apache文件路径3.Apache详解(1)安装Apache(2)启动Apache(3)配置文件a.Apache主配置文件&#xff1a;vim /etc/httpd/conf/httpd.conf信息&#xff1a;b.基于主机头的虚拟主机 (4)开始演示&#xff1a;a.新建两个网站根目录b.分别…

【MediaFoundation】相关的概念

MF 概览 Media Foundation 提供了两种不同的编程模型&#xff0c;左边展示的是端到端的媒体数据模型&#xff0c;主要用在&#xff1a;播放URL或者文件&#xff0c;以及控制流。 在图表右侧展示的第二种模型中&#xff0c;应用程序可以从源头拉取数据&#xff0c;也可以将数据…

目标检测算法 - YOLOv2

文章目录 1. Batch Normalization2. High Resolution Classifier3. Anchor、Dimension Cluster、Direct location prediction4. Loss Function5. Fine-Grained Features6. Multi-Scale Training7. Faster8. Stronger Better&#xff0c;Faster&#xff0c;Stronger。 2017年&am…

Java实现DXF文件转换成PDF

代码实现 public static void dxfToPdf(){// 加载DXF文件String inputFile "input.dxf";CadImage cadImage (CadImage) Image.load(inputFile);// 设置PDF输出选项PdfOptions pdfOptions new PdfOptions();pdfOptions.setPageWidth(200);pdfOptions.setPageHeigh…

μC/OS-II---消息邮箱管理2(os_flag.c)

目录 消息邮箱发送&#xff08;扩展&#xff09;从消息邮箱获取/无等待消息邮箱状态查询消息邮箱中断等待用邮箱作为二值信号量&#xff08;无&#xff09;用邮箱实现延时&#xff08;无&#xff09; 消息邮箱发送&#xff08;扩展&#xff09; #if OS_MBOX_POST_OPT_EN > …