14.Arrays.sort()方法底层原理: 1) 进入Arrays.sort()方法 2) 进入DualPivotQuicksort类内部的静态方法sort 3)走sort的流程 3.1. 排序范围小于286的数组使用快速排序 3.2. 进入sort方法,判断数组长度是否小于47,小于则直接采用插入排序,否则执行3。 3.3. 用公式length/8+length/64+1近似计算出数组长度的1/7。 3.4. 取5个根据经验得出的等距点。 3.5.将这5个元素进行插入排序 3.6. 选取a[e2],a[e4]分别作为pivot1,pivot2。由于步骤5进行了排序,所以必有pivot1 <=pivot2。定义两个指针less和great,less从最左边开始向右遍历,一直找到第一个不小于pivot1的元素,great从右边开始向左遍历,一直找到第一个不大于pivot2的元素。 3.7. 接着定义指针k从less-1开始向右遍历至great,把小于pivot1的元素移动到less左边,大于pivot2的元素移动到great右边。这里要注意,我们已知great处的元素小于pivot2,但是它于pivot1的大小关系,还需要进行判断,如果比pivot1还小,需要移动到到less左边,否则只需要交换到k处。 3.8. 将枢轴交换到它们的最终位置 3.9. 递归排序左右部分,不包括已知的枢轴 3.10. 对于中间的部分,如果大于4/7的数组长度,递归中间部分