這是計算機科學教科書中經常討論的幾種排序算法,如inserstion排序,選擇排序,冒泡排序等。給定一個整數或對象數組,是否有內置的Java 6語言API,讓我選擇應用特定的排序算法對數組進行排序,而不是再次重新創建這些輪子?如果沒有內置到Java 6中,是否有提供這種功能的開源庫,它們是什麼?在Java 6中有什麼不同的排序算法可用?
回答
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)性能。
請注意'Arrays.sort(Object [])'也使用合併排序。如果你可以在某處回答你的問題,我可以刪除我的。 –
@Bart謝謝你,我將它添加到我的答案中。 – Marcelo
馬塞洛,歡呼! :) –
您通常不會選擇(無論如何,內置排序)。 Collections
課程提供了一種方法,該方法對於大多數需求應該足夠高效。
Arrays.sort(int[] a)
使用調諧快速排序。
Arrays.sort[Object[] a)
使用修改後的mergesort。
- 1. python的排序()使用什麼算法?
- 2. 爲什麼Java的Arrays.sort方法爲不同類型使用兩種不同的排序算法?
- 3. qsort使用什麼排序算法?
- 4. 快速排序算法不在Java中排序
- 5. 不同的氣泡排序算法代碼 - 有什麼區別? C++
- 6. 可排序的appendTo有什麼作用?
- 7. 這是什麼樣的排序算法?
- 8. 排序算法的Java
- 9. 對基數排序只使用穩定的排序算法有什麼需要?
- 10. 在排序算法中使用不同的數組類型
- 11. 這個排序算法叫做什麼?
- 12. 這是什麼排序算法?
- 13. 有什麼方法可以計算java中的指令數
- 14. 這個排序算法叫什麼?
- 15. 排序算法只有兩個不同的元素
- 16. Java中的shell排序算法變化
- 17. 我可以在Java中使用什麼算法進行加密?
- 18. 合併排序Java算法
- 19. 這個排序算法在c#中的名稱是什麼?
- 20. 我的排序算法有什麼問題?
- 21. 我的插入排序算法有什麼問題?
- 22. 排序算法穩定或不穩定的原因是什麼?
- 23. 有什麼方法可以在firefox 6中篡改cookie?
- 24. 爲什麼我的氣泡排序算法比我的程序中選擇和插入排序算法更快?
- 25. Java算法HmacSHA256不可用
- 26. 爲什麼參數的專用字段對Java 6中的泛型方法可見但對Java 7不可見?
- 27. 用java快速排序算法(netbeans)
- 28. 有沒有什麼辦法排序java中的對象的arraylist沒有使用比較器或可比較?
- 29. 有什麼辦法可以實現完全可移植的Java EE 6部署?
- 30. 在java中使用靜態同步方法有什麼用途?
請注意,這在Java 7中是不同的 - 請參閱http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort –
@amc,你有48個問題沒有被接受的答案。也許你可以跟進答案,以便他們能夠被接受。 –