2015-01-11 63 views
2

哪個更昂貴的操作交換或比較Java中的整數數組?或者他們都可以被認爲是一樣的?哪個是更昂貴的操作交換或在Java中的整數數組比較比較

上下文:對一個幾乎排序的數組進行排序(我不是在談論k個排序數組,其中每個元素從最右k位移到最右位置)。即使我們使用插入排序,最後的比較次數也將與任何數組或最差情況下的相同。不是嗎?只是掉期將更少。如果我錯了,請糾正。

+2

基準你的代碼。 – Maroun

+1

但是請先閱讀:[如何在Java中編寫正確的微基準測試](http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java )。 – Tom

回答

2

交換應該更貴,因爲它包括:從內存來緩存

  1. 讀取數據從緩存中
  2. 讀取數據到
  3. 寫入數據寄存器回緩存

比較應因爲它包括:

    從內存個
  1. 讀取數據緩存從緩存中
  2. 讀取數據寄存器
  3. 執行單上兩個寄存器比較操作(這應該是快一點不是寫兩個整數到緩存)

但現代處理器是複雜的並且彼此不同,因此獲得正確答案的最佳方法是對您的代碼進行基準測試。

+0

你沒有忘記4:比較後的非常昂貴的條件跳轉? – MTilsted

+0

條件跳轉可能不會很昂貴,因爲:分支預測和1級代碼緩存。第一個將節省由於跳轉而清理管道,第二個將節省內存訪問和操作解碼(一些體系結構)。 –

+0

但是你似乎正在進入另一個領域,在這個領域,正確的問題是比較一個算法的總運行時間,這是由於大量的因素(包括數組中的元素的順序)。雖然問題是關於比較兩個操作的運行時間。 –