2017-07-07 64 views
-1

我有一個快速問題:我知道這兩個片段的複雜性是相同的。然而,我想知道哪一個比較好,爲什麼?這是選擇排序代碼:交換數組元素的效率vs數組索引

這是我寫的:

  for (int i = 0; i < n - 1; i++) 
      { 
       for (int j = i + 1; j <= n - 1; j++) 
       { 
        if (a[j] < a[i]) 
        { 
         int temp = a[i]; 
         a[i] = a[j]; 
         a[j] = temp; 
        } 
       } 
      } 

這是我的朋友寫道:

  for (int i = 0; i < n - 1; i++) 
      { 
       int iMin = i; 
       for (int j = i + 1; j <= n - 1; j++) 
       { 
        if (a[j] < a[i]) 
        { 
         iMin = j; 
        } 
        int temp = a[i]; 
        a[i] = a[iMin]; 
        a[iMin] = temp; 
       } 
      } 
+3

如果你有兩匹馬,並且你想知道爲什麼一匹馬更快,爲什麼你不自己比賽呢?你爲什麼要求我們告訴你哪個更快? –

+0

這不是關於哪個更快。我還沒有問他,但我只是想了解是否有一個合理的解釋,不直接在塊內交換元素。這只是一種好的編程技術,還是關於效率? –

+0

它可能沒有太大的實際差異,但第一個顯然更好。 –

回答

1

你的代碼是稍快,因爲你做掉,只有當a[j] < a[i] ,而你的朋友的代碼總是進行交換。所以,在大多數情況下,你的代碼將會減少交換。

這兩個代碼的複雜性確實相同,但您的「常量」較小,所以您的代碼更快。

+1

好的,謝謝。 –