Java排序之计数排序

计数排序思路

计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n]。这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组的值就是当前值的个数,再经过一次遍历展开,得到的数组就有序了。

  1. 新建一个长度为n-m+1的临时数组
  2. 遍历待排序数组,它的值-m作为临时数组下角标,这个位置的值加1
  3. 遍历结束,临时数组就存储了每个值得个数
  4. 最后将它展开赋值给原数组

Java代码实现

package com.wangjun.arithmetic;

import java.util.Arrays;

public class SortCount {

	public static void main(String[] args) {
//测试
int[] arr = {1,4,6,7,5,4,3,2,1,4,5,10,9,10,3};
sortCount(arr, 1, 10);
System.out.println(Arrays.toString(arr));
} //计数排序的初步实现,使用了多余的空间,可以尝试不使用多余的空间
public static void sortCount(int[] arr, int m, int n) {
int len = arr.length;
int[] tem = new int[n - m + 1];
for(int i = 0; i < len; i++) {
tem[arr[i] - m] += 1;
}
for(int i = 0, index = 0; i < tem.length; i++) {
int item = tem[i];
while(item-- != 0) {
arr[index++] = i + m;
}
}
} }

打印结果:

[1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 9, 10, 10]

Java排序之计数排序的更多相关文章

  1. 桶排序和计数排序的理解实现和比较(Java)

    比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...

  2. 排序算法的C语言实现(下 线性时间排序:计数排序与基数排序)

    计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为 ...

  3. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  4. 使用 js 实现十大排序算法: 计数排序

    使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  5. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  6. 排序算法-计数排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className CountSort * @date 201 ...

  7. 【算法导论】【排序】—— 计数排序(counting sort)

    计数排序的特点: 需要额外的数组以存储: 中间过程数据(记为数组 C),数组 C 的下标是待排序序列的元素值,下标对应的值为出现的次数: 排序后的序列(记为 B),计数排序仅获取原始待排序序列的值,对 ...

  8. python实现线性排序算法-计数排序

    计数排序假定输入元素的每一个都是介于0到k之间的整数,此处K为某个整数,当k=O(n)时,计数排序的运行时间为O(n) 它的基本思想是:根据每个输入元素x确定小于x的元素个数,根据这个信息把x直接放到 ...

  9. 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)

    计数排序 条件:要排序的数组的元素必须是在一定范围的,比方是1~100.在排序之前我们必须知道数组元素的范围. 思路:顾名思义:就是用一个数组来计数的. 步骤: 1.用一个数组来计数count[ ], ...

随机推荐

  1. [JZOJ5465]道路重建--边双缩点+树的直径

    题目链接 lueluelue 分析 这鬼题卡了我10发提交,之前做过一道类似的题目:https://rye-catcher.github.io/2018/07/09/luogu%E9%A2%98%E8 ...

  2. mysql-8.0.16-winx64的最新安装教程

    最近刚学习数据库,首先是了解数据库是什么,数据库.数据表的基本操作,这就面临了一个问题,mysql的安装,我这里下载的是64位的,基于Windows的,以下是在我电脑上的安装过程,希望可以帮助到大家. ...

  3. Vue命名路由

    Vue命名路由 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. Java 之 Hashtable 集合

    Hashtable 集合  java.util.Hashtable<K,V>集合 implements Map<K,V>接口  Hashtable:底层也是一个哈希表,是一个线 ...

  5. TSec《mysql client attack chain》

    从这个议题学到挺多,攻击手法的串联. 1.mysql Client Attack 这个攻击手法去年就爆出来了,本质就是mysql协议问题,在5步篡改读取客户端内容,导致任意文件读取,如下图所示. 修改 ...

  6. 使用CDS view开发SAP Marketing contact的facet追溯工具

    这篇SAP社区博客里,我的一位同事介绍了SAP Marketing里contact facet数据模型的存储表: https://blogs.sap.com/2016/07/01/how-does-s ...

  7. Oracle查看表之间的约束

    ----查看表约束 表格: user_constraints 查询外键约束条件 select ' select count(*) from '||TABLE_NAME||';'from user_co ...

  8. [基础累积] C#计算时间差

    TimeSpan nowTime = new TimeSpan(DateTime.Now.Ticks); TimeSpan nextTime = new TimeSpan(nextDispatcher ...

  9. oracle排序怎样弄成1 2 3 ,而不是 1 10 100

    oracle表字段设置得值不是number,而是Varchar2时排序就会出现这种问题 这个时候排序的时候需要转类型排序: order by to_number(顺序号) asc

  10. 网络OSI 7层模型

    OSI 的英文全程为Open Systems Interconnection ,中文全程为开放系统互联参考模型.是一个逻辑上的定义.主要用途使通信和计算系统自由互联,而不依赖其他架构或技.主要目标就是 ...