当前位置: 首页 > news >正文

Java 计数排序

计数排序(Counting Sort)是一种非比较型排序算法,适用于一定范围内的整数排序。它的基本思想是通过计数输入元素中每个值出现的次数,然后计算每个值的起始位置,最终将元素放到正确的位置上。计数排序的时间复杂度为 O(n + k),其中 n 是输入数组的长度,k 是输入元素的范围。

以下是计数排序的 Java 实现:

import java.util.Arrays;  public class CountingSort {  // 计数排序算法  public static void countingSort(int[] array) {  if (array.length == 0) {  return;  }  // 找到数组中的最大值和最小值  int max = array[0];  int min = array[0];  for (int num : array) {  if (num > max) {  max = num;  }  if (num < min) {  min = num;  }  }  // 计算范围大小  int range = max - min + 1;  // 创建计数数组并初始化  int[] countArray = new int[range];  Arrays.fill(countArray, 0);  // 统计每个元素出现的次数  for (int num : array) {  countArray[num - min]++;  }  // 计算每个元素在排序后数组中的位置  int index = 0;  for (int i = 0; i < countArray.length; i++) {  while (countArray[i] > 0) {  array[index++] = i + min;  countArray[i]--;  }  }  }  // 测试计数排序算法  public static void main(String[] args) {  int[] array = {4, 2, 2, 8, 3, 3, 1};  System.out.println("排序前: " + Arrays.toString(array));  countingSort(array);  System.out.println("排序后: " + Arrays.toString(array));  }  
}

代码说明:

  1. 找到数组中的最大值和最小值:遍历数组,找到其中的最大值和最小值,以便确定计数数组的范围。

  2. 创建计数数组:根据最大值和最小值计算范围大小,并创建计数数组。计数数组的长度为 max - min + 1

  3. 统计每个元素出现的次数:遍历输入数组,将每个元素减去最小值,对应到计数数组的索引位置,并增加计数。

  4. 计算每个元素在排序后数组中的位置:遍历计数数组,根据每个元素的计数,将其在输入数组中的位置设置好。

  5. 测试代码:在 main 方法中,创建一个测试数组,调用计数排序方法,并输出排序前后的数组。

注意事项:

  • 计数排序适用于范围较小的整数排序,对于范围很大的整数,计数数组可能会占用过多内存。
  • 计数排序是稳定的排序算法,即相同元素的相对位置在排序前后不会改变。

通过这种方法,你可以高效地对特定范围内的整数进行排序。

相关文章:

Java 计数排序

计数排序&#xff08;Counting Sort&#xff09;是一种非比较型排序算法&#xff0c;适用于一定范围内的整数排序。它的基本思想是通过计数输入元素中每个值出现的次数&#xff0c;然后计算每个值的起始位置&#xff0c;最终将元素放到正确的位置上。计数排序的时间复杂度为 O(…...

error: RPC failed; curl 16 Error in the HTTP2 framing layer

yschai@LAPTOP-F2L146JK:~$ git clone https://github.com/Chyusen/yschai.git Cloning into ‘yschai’… error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush after ref listing 使用Ubuntu在git clone github上的项目的时候,遇到以上报错…...

Python脚本分类和代码举例

Python是一种强大且灵活的编程语言&#xff0c;被广泛应用于数据分析、Web开发、自动化、人工智能等领域。在不同的应用场景下&#xff0c;Python脚本可以被分类为多种类型。本文将深入分析Python脚本的分类&#xff0c;同时提供相关代码示例&#xff0c;帮助读者理解和应用这些…...

【Redis十二】Redis的典型应用(缓存和分布式锁)

目录 Redis作为缓存 1.什么是缓存&#xff1f; 2.缓存的更新策略 3.缓存预热&#xff0c;缓存穿透&#xff0c;缓存雪崩和缓存击穿 Redis作为分布式锁 1.什么是分布式锁&#xff1f; 2.分布式锁的实现过程 Redis是目前后端开发中非常热门的组件之一&#xff0c;本篇文章…...

C++入门基础知识107—【关于C++continue 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C continue 语句的相关内容&#xff01;…...

【AI大模型】《多模态持续学习》最新进展综述

摘要—持续学习&#xff08;CL&#xff09;旨在使机器学习模型能够从新数据中不断学习&#xff0c;同时在不遗忘已获得知识的基础上进行扩展。随着机器学习模型从小规模到大规模预训练架构的演变&#xff0c;以及从支持单一模态数据到支持多模态数据&#xff0c;多模态持续学习…...

大厂面试真题-CPU飙升问题怎么定位

CPU使用率飙升是开发者和系统管理员常遇到的问题&#xff0c;定位CPU飙升问题通常涉及以下步骤&#xff1a; 一、使用系统监控工具 查看CPU使用图表&#xff1a;利用任务管理器&#xff08;Windows系统&#xff09;或top、htop&#xff08;Linux系统&#xff09;等工具&#…...

【每日刷题】Day137

【每日刷题】Day137 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 2. 495. 提莫攻击 - 力扣&#xf…...

24.4 基于consul服务发现模式

本节重点介绍 : consul 安装consul go代码注册服务&#xff0c;注销服务&#xff0c;获取服务node_exporter改造为consul服务发现在数量比较大时&#xff0c;在注册服务的时候&#xff0c;关闭check&#xff0c;可以降低consul的压力 consul 安装 准备工作 # 下载consul wge…...

[红队apt]快捷方式病毒攻击流程

免责声明:本文整理攻击者操作&#xff0c;帮助了解攻击原理&#xff0c;提高防范能力 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理攻击者是如何用快捷方式进行攻击的流程 快捷方式攻击原理 快捷方式可以指向执行某个程序。 我们利用快捷方式攻击的…...

一个架构师的职业素养:四种常用的权限模型

你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…...

说起来很简单,做起来很复杂:解密Chat GPT背后的原理与技术

你或许已经体验过ChatGPT&#xff0c;它能快速回答各种问题&#xff0c;生成文案、编写代码&#xff0c;甚至陪你聊些有趣的话题。看似简单易用&#xff0c;背后却隐藏着强大的技术支持。 输入几句话&#xff0c;ChatGPT仿佛“理解”了你的问题&#xff0c;立即给出准确的回答…...

tcpdump-arm平台移植

准备工作 下载并解压 972 mkdir tcpdump973 cd tcpdump/974 ls975 wget https://www.tcpdump.org/release/tcpdump-4.99.5.tar.xz976 wget https://www.tcpdump.org/release/libpcap-1.10.5.tar.xz977 tar -xvf libpcap-1.10.5.tar.xz978...

LabVIEW中的非阻塞定时器

在LabVIEW编程中&#xff0c;通常需要在某些任务执行过程中进行非阻塞的延时操作。例如&#xff0c;显示某条信息一段时间&#xff0c;同时继续执行其他任务&#xff0c;并在延时时间结束后停止显示该信息。这类需求通常用于处理优先级不同的信息显示&#xff0c;如错误信息需要…...

MIDIPLUS 50周年丨中国国际乐器展览会首日盛况

10月10日&#xff0c;由中国乐器协会、上海国展展览中心有限公司、法兰克福展览&#xff08;上海&#xff09;有限公司共同主办的中国&#xff08;上海&#xff09;国际乐器展览会在上海新国际博览中心&#xff08;上海市浦东新区龙阳路2345号&#xff09;盛大开幕。 2024上海…...

基于springboot的家政服务管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的家政服务管理系统1拥有三种角色 管理员&#xff1a;用户管理、服务管理、评价管理、预约管理、分配管理等 用户&#xff1a;登录注册、预约服务、取消服务、评价等 服…...

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 &#xff08;1&#xff09;LED配置 &#xff08;1&#xff09;LED灯里面用到了SN74HC573ADWR锁存器&#xff0c;这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚&#xff08;使能引脚&#xff09;&#xff0c;由PD2这个端口来控制的 &#xff08;2&#xff…...

Zotero 如何实现数据同步 坚果云

如何在Zotero中设置webdav连接到坚果云&#xff1f; | 坚果云帮助中心...

基于Redis实现的延迟队列

1. 适用场景 日常开发中&#xff0c;我们经常遇到这样的需求&#xff0c;在某个事件发生后&#xff0c;过一段时间做一个额外的动作&#xff0c;比如 拼单&#xff0c;如果2小时未能成单&#xff0c;取消拼单下单&#xff0c;30分钟内未支付&#xff0c;取消订单 之前的我们的…...

LINUX——内核移植、内核编译教程

Linux内核编译是一个将内核源代码转换成可在特定硬件架构上运行的二进制文件的过程。以下是编译Linux内核的一般步骤&#xff1a; 1、准备工作&#xff1a; 确保安装了必要的编译工具&#xff0c;如gcc、make、ncurses库&#xff08;用于make menuconfig&#xff09;等。 2、…...

从理论到实践:AI原生应用中的人机协作全解析

从理论到实践&#xff1a;AI原生应用中的人机协作全解析关键词&#xff1a;AI原生应用、人机协作、理论基础、实践案例、未来趋势 摘要&#xff1a;本文全面解析了AI原生应用中的人机协作&#xff0c;从理论基础入手&#xff0c;介绍了相关概念和原理&#xff0c;接着阐述了人机…...

感性负载续流二极管设计与选型指南

1. 感性负载驱动电路中的续流二极管设计1.1 电感特性与瞬态响应电感作为基础电子元件&#xff0c;其核心特性是阻碍电流变化。当恒定电流通过电感时&#xff0c;它表现为普通导线&#xff1b;但当电流变化时&#xff0c;电感会产生感应电动势(EMF)来抵抗这种变化。在电路断开瞬…...

电气安全三要素:爬电距离、绝缘电阻与绝缘电压的实战解析

1. 电气安全三要素的核心概念解析 第一次接触电气安全设计时&#xff0c;我被各种专业术语搞得晕头转向。直到有次亲眼目睹同事调试设备时因绝缘失效引发的电弧&#xff0c;才真正理解这些参数不仅是纸面数据&#xff0c;更是保命红线。爬电距离、绝缘电阻和绝缘电压就像电气安…...

SEO_快速见效的SEO外链建设方法与注意事项

SEO外链建设的核心原则 在当今竞争激烈的互联网环境中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站提升流量和知名度的关键。而在SEO的多种技术手段中&#xff0c;外链建设是提升网站排名的重要环节。外链&#xff0c;也就是其他网站对你网站的链接&#…...

OpenClaw快速入门:对接ollama GLM-4.7-Flash实现本地自动化

OpenClaw快速入门&#xff1a;对接ollama GLM-4.7-Flash实现本地自动化 1. 为什么选择OpenClawGLM本地组合 去年我为了处理每周重复的Markdown文档整理工作&#xff0c;尝试过各种自动化方案。从浏览器插件到RPA工具&#xff0c;要么功能受限&#xff0c;要么需要将敏感数据上…...

Docker部署Ollama模型

技术背景 前面写过几篇关于DeepSeek大模型的本地部署以及本地Docker部署OpenClaw的教程。但是这里边的Ollama都是直接部署在裸机上的&#xff0c;图个方便&#xff0c;想来还是不妥&#xff0c;于是补充本文&#xff0c;基于Ubuntu Linux的Docker环境中部署Ollama模型的方法。 …...

ClawHub 抖音 Skills 完整盘点:36 个 Skills 分类与选型指南

ClawHub/OpenClaw 平台上共有 36 个专门针对抖音&#xff08;Douyin&#xff09;的 Skills&#xff0c;覆盖热榜监控、视频下载、自动发布、转录分析、内容创作、合规检测等完整工作链。本文从技术实现角度做完整整理&#xff0c;含安装命令和实现细节说明。 数据截至 2026 年…...

起重机2吨

2吨起重机作为轻型物料搬运的核心设备&#xff0c;广泛应用于车间、仓库、物流中心等场景&#xff0c;其核心作用在于通过机械结构与动力系统的协同&#xff0c;实现垂直与水平方向的精准位移控制。设备采用高强度合金钢作为主梁材料&#xff0c;配合优化设计的桁架结构&#x…...

实战指南:如何用Mask R-CNN在iSAID数据集上提升航空影像分割效果(附调参技巧)

航空影像实例分割实战&#xff1a;Mask R-CNN在iSAID数据集上的调优策略 航空影像分析正逐渐成为城市规划、灾害监测和国防安全等领域的关键技术。与常规自然图像不同&#xff0c;这类影像通常包含大量密集分布的小目标&#xff0c;且目标尺度变化极大——从几个像素的小型车辆…...

FreeCAD+AI实战:手把手教你用CAD-Assistant自动生成3D模型(附避坑指南)

FreeCADAI实战&#xff1a;手把手教你用CAD-Assistant自动生成3D模型&#xff08;附避坑指南&#xff09; 在传统CAD设计流程中&#xff0c;从手绘草图到可编辑的3D模型往往需要经历繁琐的描线、约束添加和参数调整。CAD-Assistant的出现彻底改变了这一局面——这款基于工具增强…...