计数排序java
来源:互联网 发布:怎么使用淘宝钻石展位 编辑:程序博客网 时间:2024/06/05 14:50
- 计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。
桶排序的基本思想是:把数组 arr 划分为n个大小相同子区间(桶),每个子区间各自排序,最后合并。
当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序, 排序的速度快于任何比较排序算法
主流程:
1.找出待排序的数组中最大和最小的元素
2.统计数组中每个值为i的元素出现的次数,存入辅助数组help的第i项
3.对所有的计数累加,获得元素的排位,从0开始遍历help, help[i+1]=help[i] + help[i-1]
4.反向填充目标数组:将每个元素i放在新数组的第help(i)项
java代码:
/* * Created by susq on 2017-9-21. */public class CountSort { public static int[] countSort2(int[] arr) { int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; // 找出最大最小值 for (int anArr : arr) { max = Math.max(max, anArr); min = Math.min(min, anArr); } int[] help = new int[max-min+1]; // n - min: 就是排序后在新数组中它该在的位置( 原值-min -> 新位置 ,当前值:次数) // 每出现一次,该位置的值+1, 记录出现的次数 for (int anArr1 : arr) { int mapPos = anArr1 - min; help[mapPos]++; } // 累加:累加的结果是,出现在这个值前面的元素的个数 for (int i=1; i<help.length; i++) { help[i] = help[i-1] + help[i]; } int res[] = new int[arr.length]; for (int i=0; i<arr.length; i++) { int pos = --help[arr[i]-min]; //从help取得下标,help中的值应该-1才是下标 res[pos] = arr[i]; } return res; } public static void main(String[] args) { int [] arr = new int[] {1,5,3,3,2,4}; int[] res = countSort2(arr); Arrays.stream(res).forEach(System.out::println); }}
阅读全文
0 0
- 计数排序Java实现
- 计数排序-java实现
- 计数排序--Java
- 计数排序—Java
- 计数排序 java版
- Java实现计数排序
- Java实现计数排序
- java实现计数排序
- 计数排序(JAVA)
- 鸽巢(计数)排序--java
- Java实现计数排序
- 【java】计数排序 基数排序
- Java 计数排序
- 计数排序java
- Java 排序之 计数排序
- JAVA 计数排序,桶排序
- java计数排序(counting sort)
- 计数排序的 java实现
- c++实现求哈夫曼数及其对应的哈夫曼编码和译妈
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 疯狂Activiti6连载(12)DMN规范概述
- Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!解决方法
- Eclipse 关闭 updating indexes
- 计数排序java
- Gitblit环境搭建(w7 64位环境)
- Android7.0 android.os.FileUriExposedException
- CC26xx &&CC13xx 多线程
- 轻重链剖分
- android studio使用技巧
- MVP-简单的OkHttp网络请求数据
- poj 2195 Going Home(最小费用流)
- Java之Integer与int类型数据的比较-yellowcong