Java Arrays 排序

Posted lipeil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Arrays 排序相关的知识,希望对你有一定的参考价值。

Java SDK中的排序分为两种情况:

1、对基础类型数组的排序,使用DualPivotQuicksort类
a、如果是对char、short数组的排序,因为byte、char、short分别为8bit、16bit、16bit,能表示的最大数比较小(2^16):
所以,对它们的排序策略为数组长度小于32的时候使用直接插入排序、数组长度小于(128、32768)的时候使用快速排序、其他使用计数排序(时间长,需要128或者32768长度的数组辅助)

b、对于其他几种基础类型的数组排序,因为长度大,不适用计数排序,故策略为:如果数组长度小于32,使用直接插入排序,否则使用快速排序

 

2、对于非基础类型的排序,使用ComparableTimSort类
采用的排序算法为二分插入排序,特点是每次向有序区域插入一个值时,不是逐个向前比较,而是采用二分查找的思路,和中间那个值比较。
这个能减少查找的次数从N^2到nlogn,但是交换的次数仍然为N^2, 因为它是数组,而不是链表,无法直接插入到那个位置,还是需要找到index之后的元素逐个后移,不过这里可以使用System.arrayCoy的方法,提高性能

 

以上是关于Java Arrays 排序的主要内容,如果未能解决你的问题,请参考以下文章

Java Arrays.sort源代码解析

13-02 Java 数组高级算法,Arrays类

java实现希尔排序算法

java实现希尔排序算法

elasticsearch代码片段,及工具类SearchEsUtil.java

Arrays 类操作 Java 的数组排序