哪個更昂貴的操作交換或比較Java中的整數數組?或者他們都可以被認爲是一樣的?哪個是更昂貴的操作交換或在Java中的整數數組比較比較
上下文:對一個幾乎排序的數組進行排序(我不是在談論k個排序數組,其中每個元素從最右k位移到最右位置)。即使我們使用插入排序,最後的比較次數也將與任何數組或最差情況下的相同。不是嗎?只是掉期將更少。如果我錯了,請糾正。
哪個更昂貴的操作交換或比較Java中的整數數組?或者他們都可以被認爲是一樣的?哪個是更昂貴的操作交換或在Java中的整數數組比較比較
上下文:對一個幾乎排序的數組進行排序(我不是在談論k個排序數組,其中每個元素從最右k位移到最右位置)。即使我們使用插入排序,最後的比較次數也將與任何數組或最差情況下的相同。不是嗎?只是掉期將更少。如果我錯了,請糾正。
交換應該更貴,因爲它包括:從內存來緩存
比較應因爲它包括:
但現代處理器是複雜的並且彼此不同,因此獲得正確答案的最佳方法是對您的代碼進行基準測試。
你沒有忘記4:比較後的非常昂貴的條件跳轉? – MTilsted
條件跳轉可能不會很昂貴,因爲:分支預測和1級代碼緩存。第一個將節省由於跳轉而清理管道,第二個將節省內存訪問和操作解碼(一些體系結構)。 –
但是你似乎正在進入另一個領域,在這個領域,正確的問題是比較一個算法的總運行時間,這是由於大量的因素(包括數組中的元素的順序)。雖然問題是關於比較兩個操作的運行時間。 –
基準你的代碼。 – Maroun
但是請先閱讀:[如何在Java中編寫正確的微基準測試](http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java )。 – Tom