簡體   English   中英

我應該使用Java集合sort()還是自己實現?

[英]Should I use java collection sort() or implement my own?

我有一個數組,需要按升序對值進行排序。 數組內的可能值在1到9之間,會有很多重復值。 (僅供參考:我正在研究數獨求解器,並嘗試使用回溯以最小的可能性從盒子開始解決難題)

我的第一個想法是使用Shell Sort。

我做了一些查找,發現java集合使用了“修改的mergesort”(如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合並)。

因此,我想知道如果實現自己的排序算法,性能差異是否會明顯。

如果只有9個可能的值,則可能需要對sort進行計數 -基本思想是:

  • 創建一個大小為9的計數數組。

  • 遍歷數組並為每個元素遞增計數數組中的相應索引。

  • 遍歷count數組並重新創建原始數組。

它的運行時間為O(n + 9) = O(n) ,其中-標准API排序的運行時間為O(n log n)

因此,是的,這很有可能比Java API使用的基於比較的標准排序要快,但是只有一個基准可以肯定地告訴您(它可能取決於數據的大小)。


通常,我建議您首先嘗試使用標准API sort ,看看它是否足夠快-實際上,它只有1行代碼(除非您必須定義比較函數),而對於創建自己的排序功能,並在確保其通用性的同時付出了很多努力。

如果那還不夠快,請嘗試找到並實施一種適合您的數據的排序方式。 例如:

  • 插入排序在幾乎已排序的數據上效果很好(盡管如果數據離排序很遠,運行時間會很糟糕)。

  • 如果您有數字數據,則值得考慮分配排序


正如評論中指出的那樣, Arrays.parallelSort (來自Java 8)也是一個值得考慮的選項,因為它對工作進行了多線程處理(哪種sort不起作用,並且肯定要花很多精力做自己的事情……)有效率的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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