Java数组排序解码

排序是我们在计算机科学中学习的第一个算法。 排序是一个非常有趣的领域,它有大约20多种算法,而且总是很难确定哪种算法最好。 排序算法的效率是根据所需的时间和所需的空间来衡量的。 一些时间气泡排序是最好的,因为它没有空间需求,并且对于空间受限或无法随机访问元素的设备来说,它可以很好地拟合。

如今,我们倾向于使用库排序功能,大多数语言库排序功能都是自适应的,并且根据数据大小使用最佳算法。

在博客中,我将分享如何在Java Arrays.sort函数中做出这些决定。 决策基于数据类型和大小

–字节
对于字节数,java API在计数排序或插入排序之间进行决定。

如果输入数组的大小小于29,则使用插入排序,插入排序的可视化

插入排序示例300像素
对于大型数组,使用计数排序,它基于字节范围为-128到128的事实,它可以用作快速排序的优势。 计数排序对内存的需求很小,并且插入就位,因此总体上并没有进行太多分配,并且在对字节数组进行排序时将使垃圾回收器感到满意。

–字符
对于char决定是在Counting Sort和Dual Pivot QuickSort之间

如果输入的大小大于3.2K,则对使用的计数进行计数,并分配65K大小的数组以实现排序。 对于使用双枢轴的较小阵列的快速排序变体,可以使用快速排序的可视化效果。

Sorting_quicksort_anim

所使用的QuickSort也就位,因此在内存方面明智的做法是在Garbage Collector上没有太多负载。

–整数/长

对于整数/长整数,随着“ 合并排序”的输入,事情变得很有趣。

对于小于256的输入,有两个选项可用

–如果输入小于47,则使用“ 插入排序” ,在其他情况下,则使用“双枢轴快速排序” 。

对于大型输入数组,有一些很好的边缘情况检查

–如果数组已经按升序或降序排序,则通过单循环检查。

–如果数组元素相同,则使用“快速排序”,因为在这种情况下它最有效。

–或者,如果元素真的被弄乱了,例如每个偶数元素都大于奇数元素,那么它将使用快速排序。

最后所有这些检查失败,然后使用合并排序并分配相同大小的新数组并执行排序。 合并排序快速复习

合并排序示例300像素

关于Integer排序的重要注意事项是,如果已经对A​​rray进行了排序,则不会分配任何内存,并且是否正在检查QuickSort是否启动了内存分配。

–浮动/双

Float对NAN进行了特殊的优化,所有NAN都移至数组末尾,并从排序中跳过。 处理完NAN值后,排序将通过与INTEGER数据类型相同的检查。

–按对象排序

集合排序几乎没有什么不同的规则,对于集合而言,仅在Merge Sort和Timsort之间。 默认情况下,使用Timsort,它是合并和插入排序的混合。

合并排序已不再使用,并且仅在打开“ java.util.Arrays.useLegacyMergeSort”标志时使用。

在JDK 8中,还添加了基于数组输入大小的并行排序选项,对于大小大于8K的数组,则使用并行版本的sort。

翻译自: https://www.javacodegeeks.com/2016/06/java-arrays-sort-decoded.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下删除乱码文件名的方法

from: http://www.jb51.net/LINUXjishu/32910.html linux下删除乱码文件名, 不废话: 1. ls -i 列出文件的节点ID, 如: 123456789 2. find ./ -inum 123456789 -print -exec rm -rf {} \; 批量删除: for n in 123456789 987654321;do find . -inum $n -exec rm -f {} \;…

A - Beautiful Matrix

Problem description Youve got a 5  5 matrix, consisting of 24 zeroes and a single number one. Lets index the matrix rows by numbers from 1 to 5 from top to bottom, lets index the matrix columns by numbers from 1 to 5 from left to right. In one move, you …

MATLAB中用FDATool设计滤波器及使用

from: http://blog.sina.com.cn/s/blog_3e4367660100nyz1.html 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool。具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool。 2. 在fdatool工具中应该注意的几个问题:(a)Fstop&#xf…

电商等大型网站高可用,高负载架构借鉴方案(转载)

任何一个大型网站都是经历用户积累然后成长,从一台服务器到多台服务器才能构架支撑网站现有数据、用户、页面请求等。大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务…

《Hadoop实战》的笔记-2、Hadoop输入与输出

from: http://book.douban.com/annotation/17068812/ 这一问题本书只在第三章简单说了一下读写HDFS,虽然能说明问题,但是本着第一遍读书应该把书读厚的原则,我觉得很有必要自行展开一番。再说凡是万变不离其宗嘛,任何程序都是从“…

复制模式和扩展模式_扩展剂:模式还是反模式?

复制模式和扩展模式扩展器模式在最近几年变得很流行,甚至已经在OSGi标准(例如,蓝图服务和Web应用程序规范)中使用。 在处女座,我们从一开始就与扩展程序一起工作,但是尽管它们具有优势,但它们仍…

Ubuntu 18.04 下安装pip3及pygame模块

1.Ubuntu下pip3的安装、升级、卸载 安装pip3 sudo apt-get install python3-pip 升级pip3 sudo pip3 install --upgrade pip 卸载pip3 sudo apt-get remove python3-pip 2.安装pygame sudo pip3 install pygame 3.验证pygame是否安装成功,如果安装成功则会出现如下图…

linux 禁止账户远程登录

为了安全或其他原因,经常需要禁止某些用户远程登录,方法整理如下: 1. 禁止root账户远程登录 root账户下修改 /etc/ssh/sshd_config # vi /etc/ssh/sshd_config 找到 PermitRootLogin yes 这一句,将yes改成no,退出保存…

ANTLR和网络:一个简单的例子

网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序。 因此,我非常习惯在计算机上安装工具。 但是在2016年,网络无处不在,因此那里也可能需要我们的语言。 可能的情况: ANTLR 也在网络上&#xf…

下一秒

好想能看到 你嘴角微笑 最好在下一秒 好想能听到 你轻声歌唱 最好在下一秒 纯白棒球帽 墨绿色衣角 时间静止的美好 默契发生在每个下一秒 爱上同一种口味的蛋糕 不约而同哼唱一段曲调 喜欢这样看你傻傻的笑 好想能这样 就白头到老 最好从下一秒 转载于:https://www.cnblogs.com…

类加载器 jboss_JBoss AS 7类加载说明

类加载器 jboss这是示例章节,摘自Francesco Marchioni编辑的JBoss AS 7 Configuration Deployment and Administration一书,该书正在运行一个名为mastertheboss.com的JBoss门户。 根据Java EE规范的要求,理想情况下,应用程序服务器…

【转】Docker 容器化核心概念

DockerVM vs DockerDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 示例一&…

弹簧活性样品

Spring-Reactive旨在为基于Spring的项目带来响应式编程支持 ,并且有望在Spring 5的时间表中提供。 我的意图是使用此模型为REST端点行使一些非常基本的签名。 在继续之前,请允许我确认整个样本完全基于塞巴斯蒂安德勒兹(SbastienDeleuze&…

团队作业_1_博客1(分工理解)

对于团队大作业分工(服务端)的理解: 这次大作业一经出炉,还是感觉很有意思的,虽然之前老师已经提及会出这么一个大作业来训练我们的能力,但是真的看到作业的出现,还是很惊喜的。 团队作业的分工…

pojo类继承pojo类_如何编写更好的POJO服务

pojo类继承pojo类在Java中,您可以轻松地在Plain Old Java Object(POJO)类中实现一些业务逻辑,并且可以在高级服务器或框架中轻松运行它们。 有许多服务器/框架,例如JBossAS,Spring或Camel等,它们…

国外机构操盘图

转载于:https://www.cnblogs.com/carl2380/p/9139020.html

代码气味–第二部分

在上一篇文章《代码气味–第一部分》中 ,我谈到了膨胀器:它们是代码气味,可以识别为长方法,大型类,基元痴迷,长参数列表和数据块。 在这一篇中,我想深入研究面向对象的滥用者和变更阻止者 。 面…

solr 启动、停止

启动命令: solr start 停止命令 solr stop -all 转载于:https://www.cnblogs.com/yby120/p/9139791.html

第一篇博客测试

第一次发博客测试,看看都能进行什么操作。 再编辑一下,发表的时间就又改了? 没想到这个测试也有这么多人访问,那我把我的测试结果也贴出来供大家参考: 1. 无论怎么编辑,发表时间不会更改; 2. 编…

hadoop 提交程序并监控运行

程序编写及打包 使用maven导入第三方jar pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…