源码分析Arrays-sort中使用的排序算法

Java 主要排序方法为 java.util.Arrays.sort(),粗略的来讲,对于基本数据类型使用双轴快排,对于引用类型使用归并排序。接下来我们深入 Arrays.sort 的源码,更具体的分析其中所使用的排序算法。

Arrays.sort底层

一开始会判断数组是否是小数组(元素个数小于286),是则使用快速排序

static void sort(int[] a, int left, int right,
                 int[] work, int workBase, int workLen) {
   
    // Use Quicksort on small arrays 对小数组使用快速排序
    if (right - left < QUICKSORT_THRESHOLD) {
   
        sort(a, left, right, true);
        return;
    }

但其实也并不是直接就开始使用快速排序,点进 sort(a, left, right, true) 看,会发现元素个数小于47的极小数组,会使用插入排序

private static void sort(int[] a, int left, int right, boolean leftmost) {
   
    int length = right - left + 1;
    // Use insertion sort on tiny arrays 对极小数组使用插入排
    if (length < INSERTION_SORT_THRESHOLD) {
   
        if (leftmost) {
   
            for (int i = left, j = i; i < right; j = ++i) {
   
                int ai = a[i + 1];
                while (ai < a[j]) {
   
                    a[j + 1] &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值