[英]The Running Time For Arrays.Sort Method in Java
有誰知道 array.sort java 方法的大 O 表示法的運行時間? 我的科學博覽會項目需要這個。
來自官方文檔
我觀察到主要有兩種方法。 因此,這取決於您正在排序的內容以及您正在調用的sort
方法系列中的重載方法。
文檔提到,對於原始類型,例如long
、 byte
(例如: static void sort(long[])
):
排序算法是一個經過調整的快速排序,改編自 Jon L. Bentley 和 M. Douglas McIlroy 的“設計排序功能”,軟件實踐和經驗,卷。 23(11) P. 1249-1265(1993 年 11 月)。 該算法在許多數據集上提供 n*log(n) 性能,導致其他快速排序降級為二次性能。
對於對象類型:(例如: void sort(Object list[])
)
保證 O(nlogn) 性能
排序算法是一種改進的歸並排序(如果低子列表中的最高元素小於高子列表中的最低元素,則省略合並)。 該算法提供有保證的 n*log(n) 性能。
希望有幫助!
Arrays.sort()
使用Tim sort
- O(N log N) 用於對象數組和QuickSort
用於原始數組 - 同樣是 O(N log N)。
這是排序算法的一個很棒的比較: http : //www.sorting-algorithms.com/
我已經在各種數據集中測試了 Arrays.sort() 的時間復雜度。 在最壞的情況下,時間復雜度為 O(n^2)。 嘗試使用 Arrays.sort() 然后使用 Collections.sort() 來做這個問題。 你會看到不同之處。 當我使用 Arrays.sort() 時的問題鏈接花了超過 2 秒。 當我使用 collections.sort() 時,需要 0.2 秒 Collections.sort() 使用修改后的合並排序,而 Arrays.sort() 使用 QuickSort()。 如果您使用的是 Array,下面的代碼是在 Java 中排序的最佳方式。 在列表的情況下,您可以默認使用 Collections.sort()。
static void sort(long[] a) {
ArrayList<Long> l=new ArrayList<>();
for (long i:a) l.add(i);
Collections.sort(l);
for (int i=0; i<a.length; i++) a[i]=l.get(i);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.