JDK 1.8  java.util.Arrays.class(rt.jar)

1. Collections.sort方法底层就是调用的Arrays.sort方法。

2. Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。

  基本类型:插入排序、调优的快速排序和归并排序相结合的排序方法
  对象类型:改进的归并排序和插入排序相结合的方法

  以int[]数组为例:<47 插入排序;>=47 && <286 快排; >286 归并排序。

3. 双轴快排:

  快速排序使用的是分治思想,将原问题分成若干个子问题进行递归解决。选择一个元素作为轴(pivot),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比轴元素小,另外一部分的所有数据都比轴元素大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
  双轴快排(DualPivotQuicksort),顾名思义有两个轴元素pivot1,pivot2,且pivot ≤ pivot2,将序列分成三段:x < pivot1、pivot1 ≤ x ≤ pivot2、x >pivot2,然后分别对三段进行递归。这个算法通常会比传统的快排效率更高,也因此被作为Arrays.java中给基本类型的数据排序的具体实现。

4. Arrays.sort对升序数组、降序数组和重复数组的排序效率有了很大的提升,这里面有几个重大的优化。

1.对于小数组来说,插入排序效率更高,每次递归到小于47的大小时,用插入排序代替快排,明显提升了性能。
2.双轴快排使用两个pivot,每轮把数组分成3段,在没有明显增加比较次数的情况下巧妙地减少了递归次数。
3.pivot的选择上增加了随机性,却没有带来随机数的开销。
4.对重复数据进行了优化处理,避免了不必要交换和递归。

5. Arrays.sort()默认的是升序排序,降序排序可采用Collection.sort()匿名内部类。

     //降序,可用Comparator()匿名内部类Arrays.sort(array, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}});

6. Arrays.sort(int[] a, int fromIndex, int toIndex)

从0开始数,【fromIndex,toIndex】

从1开始数, ( fromIndex,toIndex】

参考网址:

  1. 浅谈Arrays.sort()原理

  2. 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)

转载于:https://www.cnblogs.com/haimishasha/p/11488271.html

JAVA基础系列:Arrays.sort()相关推荐

  1. 夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  2. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  3. 夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. 夯实Java基础系列20:从IDE的实现原理聊起,谈谈那些年我们用过的Java命令

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. Java基础系列-Collector和Collectors

    原创文章,转载请标注出处:<Java基础系列-Collector和Collectors> 一.概述 Collector是专门用来作为Stream的collect方法的参数的. public ...

  7. string substring的用法_夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战...

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  8. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!

    什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...

  9. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

  10. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

最新文章

  1. 限时删!一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)
  2. mysql DDL语句
  3. 简单示例,VS2019调试C语言程序
  4. RedHat YUM configure
  5. Hadoop2.x编程入门实例:MaxTemperature
  6. 一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?
  7. 大数据-----软件开发模型(详细讲解)
  8. vs2017 js cordova + dotnet core 开发app
  9. QVector、QList、QLinkedList类用法区别
  10. 【笔记】《离散数学》第十章 递推方程与生成函数
  11. rdlc打印时多出空白页面(reportviewer).导出多出空白页(pdf,word)
  12. 使用Google表格进行网页抓取
  13. 无线路由器 mc服务器,无线路由器的mc地址.doc
  14. using b tree mysql_浅析MysQL B-Tree 索引
  15. ContentProvider介绍
  16. 柯布-道格拉斯效用函数下的pcr抽卡策略
  17. SiC功率半导体产业高峰论坛成功举办
  18. 微信小程序获取图片的宽高,以及如何获取手机设备的宽高?
  19. PLC的高低字节转换
  20. 考虑下面两个JSP文件代码片断: test1.jsp:

热门文章

  1. OpenShift 4 - DevSecOps Workshop (14) - 镜像合规扫描
  2. OpenShift 4 - 如何用Machine Config Operator修改集群节点CoreOS的配置
  3. python杨辉三角编程_Python基础练习实例49(打印杨辉三角)
  4. html怎么增加td的宽度,html td怎么设置宽度
  5. mybatis-plus实现自定义字段修改数据 后续更新CRUD
  6. 金蝶kiss对计算机软件的要求,金蝶软件的产品适用范围分析
  7. mac用python爬虫下载图片_利用Python爬虫采集mac电脑皮肤|简明python教程|python入门|python教程...
  8. suse linux运行asp,Linux Supervisor的安装与使用入门---SuSE
  9. IndirectmodificationofoverloadedelementofXXXhasnoeffect的解决办法
  10. elementUI table 表格表头居中 颜色、内容居左