簡體   English   中英

Java 中 Arrays.Sort 方法的運行時間

[英]The Running Time For Arrays.Sort Method in Java

有誰知道 array.sort java 方法的大 O 表示法的運行時間? 我的科學博覽會項目需要這個。

來自官方文檔

我觀察到主要有兩種方法。 因此,這取決於您正在排序的內容以及您正在調用的sort方法系列中的重載方法。

文檔提到,對於原始類型,例如longbyte (例如: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM