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

算法导论学习笔记——计数排序算法

/**
 * 计数排序假设n个输入元素中的每一个都是介于0和k之间的整数, 此处k为某个整数
 *基本思想为:对每一个输入元素经,确定出小于x的元素个数,这样就可以把x直接放到它在最终输出数组中的位置上。
 *算法复杂度为O(n+k),当k=O(n)时,其运行时间为O(n)
 *另一个特点:计数排序是稳定的,具有相同值的元素在输出数组中的相对次序与它们在输入数组中的次序相同
 */
public class CountingSort {

	/**
	 * @param a  //存放需要排序的原数组
	 * @param b  //存放排序结果的数组
	 * @param k  //a中的每个元素都介于0和k之间
	 */
	static void countingSort(int a[],int b[],int k){
		//c数组为临时存储区,c存储从0到k每个元素在a中出现的次数,故c的长度为k+1。
		int c[]= new int[k+1];
		//c[i]中存放了等于i的元素的个数(0=< i <=k)
		for(int i = 0;i<a.length;i++)
			c[a[i]]++;
		//c[i]存放小于或等于i的元素个数
		for(int i = 1;i<=k;i++)
			c[i]=c[i]+c[i-1];
		//由于c[i]存放小于等于i的元素个数,所以i应该放在b数组中的c[i]位置(由于数组从0开始,所以要减1)
		for(int r = a.length-1;r>=0;r--){
			int i = a[r];
			b[c[i]-1] = i;
			//每次c[i]减1可以保证下一个等于i的相同元素,落在b[c[i]-1]的前一个位置
			c[i]--;
		}
	}
	//测试.....
	public static void main(String[] args) {
		int a[]={2,5,3,0,2,3,0,3};
		int b[]= new int[8];
		countingSort(a,b,5);
		for(int i =0;i<b.length;i++)
			System.out.println(b[i]);
	}
}


相关文章:

  • 本地化资源文件关键字重复的报错解决。
  • 数字签名是什么?
  • 探索推荐引擎内部的秘密:推荐引擎初探
  • 决策树
  • 算法导论学习笔记——基数排序
  • 算法导论学习笔记——桶排序
  • [java]删除数组中的某一个元素
  • 当你输入一个网址的时候,实际会发生什么?
  • 【转】Android下面打印进程函数调用堆栈(dump backtrace)的方法
  • 算法导论学习笔记——找数组中第i小的元素
  • 获取验证码
  • 在最坏情况下,利用n + ┌lgn┐ - 2 次比较,即可找到 n 个元素中的第2小元素
  • 牛客网上的剑指offer题目
  • 算法导论学习补充——希尔排序
  • java虚拟机学习笔记——java虚拟机内部体系概述(第五章)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JavaScript设计模式与开发实践系列之策略模式
  • Js基础知识(一) - 变量
  • Mysql优化
  • React-Native - 收藏集 - 掘金
  • Vue实战(四)登录/注册页的实现
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从伪并行的 Python 多线程说起
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 多线程 start 和 run 方法到底有什么区别?
  • 机器学习中为什么要做归一化normalization
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 组复制官方翻译九、Group Replication Technical Details
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​iOS安全加固方法及实现
  • #NOIP 2014#Day.2 T3 解方程
  • $$$$GB2312-80区位编码表$$$$
  • (实战篇)如何缓存数据
  • (五)c52学习之旅-静态数码管
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net 4.0发布后不能正常显示图片问题
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET轻量级ORM组件Dapper葵花宝典
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @angular/cli项目构建--Dynamic.Form
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [<事务专题>]
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AR]Vumark(下一代条形码)
  • [Asp.net mvc]国际化
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BZOJ4010]菜肴制作
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [Contiki系列论文之2]WSN的自适应通信架构
  • [Git].gitignore失效的原因