java.util.Arrays.sort方法简单分析

来源:互联网 发布:恒大淘宝足球股价 编辑:程序博客网 时间:2024/05/20 01:39

今天比较仔细的观察了下1.6jdk下的java.util.Arrays.sort方法

稍微总结下:

sort分为对基本数据类型(byte char short int float long double)和object类型的排序

1.对基本数据类型的排序

Arrays类中public方法都是sort,

但里面实际做工作的是sort2和sort1

最实际的工作是sort1

sort2是做一些边界处理的闲杂工作,类似于

几个核心的sort1方法声明:

private static void sort1(long x[], int off, int len)

private static void sort1(int x[], int off, int len)

private static void sort1(short x[], int off, int len)

private static void sort1(char x[], int off, int len)

private static void sort1(byte x[], int off, int len)

private static void sort1(double x[], int off, int len)

private static void sort1(float x[], int off, int len)

实现逻辑基本相同,如果数组的长度小于7,则是最简单的插入排序,否则采用快速排序

由于快速排序在最坏情况下的时间复杂度为O(n^2),故标志元素的选取也是有讲究的,

类似于

中的big arrays部分

2.对object数据类型的排序,主要是采用归并排序

主要实现方法

private static void mergeSort(Object[] src,
      Object[] dest,
      int low,
      int high,
      int off)

以及

 private static void mergeSort(Object[] src,
      Object[] dest,
      int low, int high, int off,
      Comparator c)

这两个,

在归并过程中如果数组长度小于7,则采用插入排序使数组有序,

否则继续递归归并,完成排序。