2016-03-02 56 views
1

我想知道sort_by背後的排序算法是什麼,這很複雜。`sort_by`的複雜性是什麼?

我正在排序一個嵌套數組,這就是它所做的;從:

arr = [[0,2],[1,1],[3,5],[4,2]] 

我排序它,

arr = arr.sort_by{|x,y|y} 

並且變得:

arr = [[1,1],[0,2],[4,2],[3,5]] 
+1

Ruby使用快速排序的實現。因此它平均爲'O(n log n)'。 – spickermann

+1

通常,當您考慮使用'sort_by'而不是'sort'時,那就是當您在塊中執行一些不重要的計算時。在這種情況下,塊中的計算是整個操作複雜性的決定因素,排序算法本身沒有顯着的貢獻。重要的是該塊的評估次數,並且在這方面,「sort_by」比「sort」更快。 – sawa

+0

@sawa - 只要塊中的計算對於集合的大小來說具有恆定的複雜性,它就不會影響整體的排序複雜性... –

回答

0

sort方法需要øÑ日誌Ñ)。 sort_by方法實現了Schwartzian變換。它增加了的Ô(2 Ñ)的開銷,而實際的排序保持在ÔÑ日誌Ñ)。這可能會付出代價,因爲迭代速度比原來的迭代速度快。

sort對於小陣列應該更快,而對於大陣列來說sort_by會更好。理論上。


我無法抗拒基準,這裏是結果。數組大小在x軸上,以及在軸上的排序時間(秒)。數組元素是由SecureRandom.base64(50)創建的隨機字符串。 Ruby版本是1.8.7。

enter image description here

結果表明,sort_by沒有顯著獲得對sort隨着數組大小。

相關問題