20230407 Arrays.sort

分析以下方法:

  • Arrays#sort(int[])
  • Arrays#sort(Object[] a)

DualPivotQuicksort

  • Arrays#sort(int[]) 使用 DualPivotQuicksort

  • Dual-Pivot Quicksort 是一种快速排序算法的变体

  • Dual-Pivot Quicksort 的主要思想是利用两个枢轴元素将数组分成三个部分,从而提高排序的效率

  • 快速排序不具有稳定性,所以用来对基础类型排序,而对象类型使用的是归并排序

  • DualPivotQuicksort的空间复杂度为O(n log n),需要额外的空间

  • DualPivotQuicksort的时间复杂度为O(n log n)

  • DualPivotQuicksort.sort

    • 数组个数小于286
      • 个数小于47,传统插入排序
      • 个数大于等于47,双轴快速排序
    • 数组个数大于等于286
      • 判断数组是否已经接近有序
        • 不是,使用快速排序
        • 是,使用归并排序

TimSort

  • Arrays#sort(Object[] a) 使用 TimSort
  • TimSort是一种混合了归并排序和插入排序的排序算法
  • 具有稳定性
  • TimSort的空间复杂度为O(n),需要额外的空间
  • TimSort的时间复杂度为O(n log n),最好时间复杂度为O(n)
posted @ 2023-06-20 11:23  流星<。)#)))≦  阅读(16)  评论(0编辑  收藏  举报