Arrays.sort()根據(jù)入?yún)㈩愋瓦x擇以下排序算法
- 基本類型數(shù)組使用快速排序
- 對象數(shù)組使用歸并排序
原因
- 使用不同類型的排序算法主要是由于快速排序是不穩(wěn)定的,而合并排序是穩(wěn)定的。這里的穩(wěn)定是指比較相等的數(shù)據(jù)在排序之后仍然按照排序之前的前后順序排列。對于基本數(shù)據(jù)類型,穩(wěn)定性沒有意義,而對于對象類型,穩(wěn)定性是比較重要的,因?yàn)閷ο笙嗟鹊呐袛嗫赡苤皇桥袛嚓P(guān)鍵屬性,最好保持相等對象的非關(guān)鍵屬性的順序與排序前一直;
- 另外一個(gè)原因是由于合并排序相對而言比較次數(shù)比快速排序少,移動(dòng)(對象引用的移動(dòng))次數(shù)比快速排序多,而對于對象來說,比較一般比移動(dòng)耗時(shí)。
補(bǔ)充一點(diǎn)合并排序的時(shí)間復(fù)雜度是n*logn, 快速排序的平均時(shí)間復(fù)雜度也是n*logn,但是合并排序的需要額外的n個(gè)引用的空間。