文档章节

排序算法笔记:计数排序 CountingSort in java

CheN_exe
 CheN_exe
发布于 2014/01/04 13:40
字数 387
阅读 30
收藏 0
/**
 * 计数排序
 * 简述:
 * 		创建一个临时数组temp[max],max>=max(array).先统计array[i]的个数于temp[array[i]]上,再通过temp[]确定每一个数字的位置(算出有m个比n小的,则n就在m+1上),最后将数据串与result上.
 * 时间复杂度:
 * 		当k=O(n)时,为O(n)
 * 空间复杂度:
 * 		O(n)
 * 优点:
 * 		时间复杂度几乎为最低
 * 缺点:
 * 		对数组内容要求较多:1.全为自然数;2.若数字太大,则需要过多额外空间.
 * 可改进:
 * 		通过把100当做1的方式,可以实现两位小数的排序,不过太浪费空间
 * @author CheN
 *
 */
public class CountingSort {
	public static int[] asc( int[] array ){
		return sort(array);
	}
	
	private static int[] sort( int[] array ){
		int max = 0;//max为某个整数,该整数大于array中最大的整数
		for( int i = 0 ; i < array.length ; i++ ){
			if( max < array[i]){
				max = array[i];
			}
		}
		int[] result = new int[array.length] , temp = new int[max];
//		for( int i = 0 ; i < k ; i++ ){
//			temp[i] = 0;
//		}
		// 计数
		for( int i = 0 ; i < array.length ; i++ ){
			temp[array[i]] = temp[array[i]]+1;
		}
		// 统计比第i位小的数字个数的总和,即统计数组中每一位之前的值之和。
		for( int i = 1 ; i < max ; i++ ){
			temp[i] = temp[i]+temp[i-1];
		}
		// 将临时数组中的不为零的位,分别按照它的值的数量,填入result数组中,从而完成排序
		for( int i = array.length - 1 ; i >= 0 ; i-- ){
			result[temp[array[i]]-1] = array[i];
			temp[array[i]] = temp[array[i]]-1;
		}
		return result;
	}
}


若有错误或不妥之处,敬请谅解并指点。

© 著作权归作者所有

共有 人打赏支持
CheN_exe
粉丝 2
博文 40
码字总数 17192
作品 0
海淀
程序员
java 通配符的应用— java 排序算法

这几天无聊,又重新学起java的排序算法,为DualPivotQuickSort做准备。为了更好地适应各种情况,我们选择使用通用类型T和通配符的上下界来实现,同时这次谈的是对数组对象的排序。如果你对j...

天地一MADAO_
2014/03/02
0
0
Redis学习笔记之基本数据结构

Redis基础数据结构 Redis有5种基本数据结构:String(字符串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合) 字符串string 字符串类型是Redis的value最简单的数据结构,类似与Java语言...

smileNicky
09/26
0
0
08《Java核心技术》之Vector、ArrayList、LinkedList有何区别?

一、提出问题 我们在日常的工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同,比如我们最早接触到的 C 语言,需要自己实现很多基础数据结构,管理和操...

飞鱼说编程
10/11
0
0
读《深入理解Java虚拟机》- 笔记08

《深入理解Java虚拟机:JVM高级特性与最佳实践》第2版 第10章 早期(编译期)优化 59. 语法糖 在计算机语言中添加某种语法,对语言的功能没有影响,但是方便开发人员使用。 泛型是一种语法糖...

阿历Ali
08/18
0
0
【Java小收获】使用Collection对ArrayList排序

正文之前 毕业论文肝到14000实在是肝不动了,必须开点新模块才能走得动,不然没法搞。所以最近在琢磨离散化这个东西。主要是参考的这个文献 正文 好吧,这个只是个Part,做个笔记而已,不必较...

HustWolf
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
今天
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部