2013-02-18 56 views
-1

我正在測試一些排序算法,並測量它們的執行時間,發現一些很奇怪的東西,並提出了這個問題,是> =快於>?當> =用於元素比較時,插入排序比>更慢,爲什麼?

+8

介意你改變了排序算法本身。如果你想檢查這兩個對方,正確的while語句是:while(j> -1 && aux.key < pA-> Positions [j] .key) – Vogel612 2013-02-18 16:15:45

+0

您正在比較不同的算法。 – 2013-02-18 16:17:35

+1

這實際上是一個有趣的問題,但你給它一個標題,使它看起來像一個無趣的問題。在編譯代碼中,如果沒有重載運算符,'> ='和'>'應該在測量噪聲中使用相同的時間(它實際上是從'BGT'到'BGE'機器指令的變化)。但是,您的更改會使排序算法的行爲有所不同,* *很容易在運行時間上產生很大差異 – zwol 2013-02-18 16:17:57

回答

2

CPU體系結構特定。無論如何,你如何在現代處理器上測量它?

但是,如果密鑰不是一個真正的int(即你將它匿名爲1),並且沒有特定的重載操作符< =比< =的代碼性能會比<差很多。

在您的特定算法中,在< =和<之間切換會破壞您的算法,這就是發生在這裏的情況。

1

不,在任何現代硬件上,>和> =之間沒有性能差異,任何時間變化都是虛假的,純粹是巧合。你確定代碼片段實際上是做同樣的事嗎?您的編譯器設置是否設置爲最大化優化(在調試模式下對代碼進行計時無用)?

順便說一句,你可能不應該在C++中用「T」開始你的類型名稱。這不是Pascal ^^

相關問題