對於原始類型的Java Arrays.sort()使用快速排序。另一方面Arrays.sort()爲對象使用合併排序。而且,Collection.sort()也使用合併排序。集合排序使用Arrays排序下面的實現。所以,簡單地說,我可以說基元使用快速排序進行排序,但對象使用合併排序進行排序。爲什麼合併排序用於Android/Java API中的對象?
我的猜測是它與自己排序算法有關。關於「快速排序」和「合併排序」的SO有很多討論,如this和this。似乎有一個矛盾的主張,哪一個更好,這是可以理解的,因爲這取決於數據集。
我的理解是
- 到位:快速排序獲勝。合併排序可以在鏈接列表中就地實現
- 外部存儲數據:合併排序勝出。
- 排序列表(由任何形式的鏈接列表支持):合併排序勝出。 Link
Android API似乎遵循與Java相同的模式。這是我在Arrays.java
public static void sort(long[] array) {
DualPivotQuicksort.sort(array);
}
而這個發現,
public static void sort(Object[] array) {
ComparableTimSort.sort(array);
}
什麼,我不明白的是,是什麼使合併排序一個很好的候選人進行排序在Java或Android中的對象?爲什麼不把這個決定留給開發者?
穩定排序的好處的好解釋。 – chrylis 2015-03-02 06:02:04