簡體   English   中英

如何有效地對int數組進行排序

[英]How to sort int array efficiently

我有一些整數

int array[] = ...

我可以使用它來排序

Arrays.sort(array);

但Arrays.sort使用quicksort,有時會導致O(n ^ 2)復雜度。 我有一個想法將它轉換為List然后對它進行排序(使用mergesort,因此上限是O(n log n)) ,但缺點是由於從int到Integer的裝箱,它會創建很多對象。

我的第三種方法是:

array = Arrays.stream(array).sorted().toArray();

我只在IntStream上運行,但不幸的是文檔中沒有提到復雜性。

我正在尋找類似的問題,我發現只有java.util.stream.Stream <T> .sorted()的Big-O復雜性,這根本沒有用,因為有兩個不同的答案(首先當然是部分錯誤,因為Arrays.sort並不總是O(n log n)) 那第二個怎么樣? 我還沒有找到證據。

您應該調查Heapsort ,稍微慢一點它保證O(n Log n)。 Quicksort vs heapsort

還有教科書的解釋在這里

如果整數范圍很小,你可以使用Counting Sort ,它使用數字作為數組索引,而不像具有O( nlogn )下限的比較排序算法(例如Quicksort或Mergesort),它的復雜度為O ( n + k ),其中k是最小值和最大值之間的范圍。

選擇哪種算法總是取決於您對陣列元素分布的任何額外知識。

只是自己實現mergesort,這不是火箭科學。 實現之后,請花一點時間運行一些基准測試,並將實現的性能與Arrays.sort的性能進行比較。 那里可能會有一些驚喜等着你。

另外,閱讀過早優化 ,我想你可能會發現這個概念很有用。

暫無
暫無

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

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