数据结构之排序算法Java实现(8)—— 线性排序之计数排序算法
计数排序是线性排序。
升序排序:
public void sortByAsc(int[] data) {if(data == null || data.length <= 1)return;/** find the range of data */int range = data[0];for(int i = 1; i< data.length; i++){if(range < data[i]){range = data[i];}}if (range <= 0) { System.out.println("边界不能为负数");return; } /** count sort */countSortByAsc(data,range);}private void countSortByAsc(int[] data, int range) {/**建一个长度为range+1的的数组countArray,里面的每一个元素初始都置为0(Java里面默认就是0)。*/int[] countArray = new int[range + 1];/**遍历待排序的数组,计算其中的每一个元素出现的次数,比如一个key为i的元素出现了3次,那么countArray[i]=3。*/for(int i = 0;i < data.length; i++){int val = data[i];if(val < 0 || val > range){System.out.println("下标超界");return;}countArray[val] += 1;}for(int i = 0,index = 0;i < countArray.length ; i++){for(int j = 0; j <countArray[i];j++ ){data[index] = i;index++;}}}
降序排序:
public void sortByDesc(int[] data) {if(data == null || data.length <= 1)return;/** find the range of data */int range = data[0];for(int i = 1; i< data.length; i++){if(range < data[i]){range = data[i];}}if (range <= 0) { System.out.println("边界不能为负数");return; } /** count sort */countSortByDesc(data,range);}private void countSortByDesc(int[] data, int range) {/**建一个长度为range+1的的数组countArray,里面的每一个元素初始都置为0(Java里面默认就是0)。*/int[] countArray = new int[range + 1];/**遍历待排序的数组,计算其中的每一个元素出现的次数,比如一个key为i的元素出现了3次,那么countArray[i]=3。*/for(int i = 0;i < data.length; i++){int val = data[i];if(val < 0 || val > range){System.out.println("下标超界");return;}countArray[val] += 1;}for(int i = countArray.length - 1,index = 0;i >=0 ; i--){for(int j = 0; j <countArray[i];j++ ){data[index] = i;index++;}}}
转载于:https://www.cnblogs.com/Gabby/p/6523148.html
数据结构之排序算法Java实现(8)—— 线性排序之计数排序算法相关推荐
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...
- java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
- l bfgs算法java代码_数值优化:理解L-BFGS算法
译自<Numerical Optimization: Understanding L-BFGS>,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了.对 ...
- tsp问题用蚁群算法java实现_TSP解决之道——蚁群算法
参考 蚁群算法原理与应用1-自然计算与群体智能 简介 1.蚁群算法(Ant Clony Optimization,ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作 ...
- 数据结构之排序算法Java实现(2)——选择类排序之堆排序算法
这个文章旨在存代码,看了很多网上写推排序的算法,感觉写的过于臃肿,我去努力地理解了思想,自己写的,有什么问题欢迎指正. 首先是升序排序,这个要建小顶堆,Java代码如下: public <T e ...
- java的 交换排序 快速排序算法_数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法...
快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关. 升序排序: /** * 快速排序 * 升序排序 */ @Override public > void ...
- 跑胡子c语言算法,跑胡子胡牌算法Java版(带赖子、基于回溯算法)
跑胡子规则 跑胡子,小写"一"到"十"各4张共40张,大写"壹"到"拾"各4张共40张. 砌牌:跑胡子为3人同玩,庄家砌 ...
- 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例
本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...
最新文章
- 一个非常好用的 Python 魔法库
- WindowsAPI每日一练(2) 使用应用程序句柄
- windows创建定时任务执行python脚本
- 疯狂java讲义之流程控制与数组
- php自己写配置项,创建配置文件 用PHP写出自己的BLOG系统 2
- 处理参数中存在多个连续空格,只显示一个空格,复制后搜索不到得问题
- mysqldump备份单表数据
- 发布程序后显示:未能创建类型
- proxy in nodejs code
- ssm 静态资源处理器
- iframe关于滚动条的去除和保留
- 95-50-050-java.nio.channels-NIO-NIO之Channel(通道)
- android服务开启线程,android之service与intentService的不同
- Code UI Automation脱离VS黑盒自动化测试工具编写
- 机器人学基础(一):空间描述与坐标变换
- Postman 汉化教程
- 怎么将图片转换成word文档?图片转word其实很简单
- 2022年上半年技术领域TOP 10高薪岗位出炉,第一名月薪4万
- AutoCAD块属性提取
- 工业设计公司在设计时有哪些注意的地方
热门文章
- ORA-28002 the password will expire
- H5_0020:判断安卓苹果平台
- kylin基础概念和基础性能优化
- Good, then we can start
- Fundamentals of speech signal processing
- 常用的字符串对象方法
- linux date -d 的一些使用方法
- 使用MS Test进行单元测试
- 学用 ASP.Net 之 System.Collections.Specialized.StringDictionary 类
- pgpool-II3.1 的内存泄漏(五)