2011-07-25 38 views
7

這是計算機科學教科書中經常討論的幾種排序算法,如inserstion排序,選擇排序,冒泡排序等。給定一個整數或對象數組,是否有內置的Java 6語言API,讓我選擇應用特定的排序算法對數組進行排序,而不是再次重新創建這些輪子?如果沒有內置到Java 6中,是否有提供這種功能的開源庫,它們是什麼?在Java 6中有什麼不同的排序算法可用?

+1

請注意,這在Java 7中是不同的 - 請參閱http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort –

+1

@amc,你有48個問題沒有被接受的答案。也許你可以跟進答案,以便他們能夠被接受。 –

回答

22

Arrays.sort()方法在所有基元類型數組中使用快速排序。

排序算法是一個調諧快速排序,改編自Jon L. Bentley和M. Douglas McIlroy的「Engineering a Sort Function」,Software-Practice and Experience,Vol。 23(11)第1249-1265頁(1993年11月)。該算法在許多數據集上提供n * log(n)性能,導致其他快速排序降至二次性能。

Collections.sort()方法使用合併排序。這種排序也用於Arrays.sort(Object[])Arrays.sort(T[], Comparator<? super T>)

排序算法是一個經過修改的合併排序(如果低位子列表中的最高元素小於高位子列表中的最低位元素,則省略合併)。該算法提供了有保證的n log(n)性能。該實現將指定的列表轉儲到數組中,對數組進行排序,然後遍歷列表,以重置數組中相應位置的每個元素。這樣可以避免因試圖對鏈表進行排序而導致的n2 log(n)性能。

+3

請注意'Arrays.sort(Object [])'也使用合併排序。如果你可以在某處回答你的問題,我可以刪除我的。 –

+0

@Bart謝謝你,我將它添加到我的答案中。 – Marcelo

+0

馬塞洛,歡呼! :) –

3

您通常不會選擇(無論如何,內置排序)。 Collections課程提供了一種方法,該方法對於大多數需求應該足夠高效。

相關問題