工业级的排序算法
Page content
[TOC]
你所熟悉的语言中,排序算法是如何实现的?
工业级的排序算法
java 1.7 中排序按照排序的内容可以分为基本类型和对象类型。
java中排序的实现
基本数据类型
Arrays.sort()中
byte数组使用插入排序和计数排序(待排序数组元素个数大于29)结合。
short,char , int, long, float, double 小规模数组(元素个数46以下)使用插入排序,大规模数组使用双轴快排。long 小规模使用的quicksort
dual-pivot-quicksort_geeksforgeeks
对象类型
从源代码中看使用的是TimSort(为了兼容,保留到了归并排序)
public static void sort(Object[] a, int fromIndex, int toIndex) {
rangeCheck(a.length, fromIndex, toIndex);
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, fromIndex, toIndex);
else
ComparableTimSort.sort(a, fromIndex, toIndex, null, 0, 0);
}
Collections排序
Collections.sort()将集合转成数组进行排序。
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}