2009-06-17 91 views
0

我正在通過選擇排序算法0​​ 尋找,我想我在實現中發現一個錯誤。選擇排序 - 最小/最大索引

如果你通過算法工作,有一個名爲「index_of_min」的變量,我認爲它應該是「index_of_max」(因爲當我測試它時,它從最大到最小排序)。

認爲這是一個錯字或一個小錯誤,我檢查了一些其他網站,如wikipedia和一些鮮爲人知的網站,如geekpedia。看起來他們叫它min的索引。

當我通過調試器運行它時,它在我看來確實是最大值的索引。我在某個地方犯了錯嗎?

編輯:正如Svante指出的,只有編程實現是錯誤的。維基百科和Geekpidia都很好。

回答

3

維基百科和geekpedia網站似乎是正確的,cprogramming.com實現實際上有一個錯誤;這樣的:

if (array[index_of_min] < array[y]) 
    { index_of_min = y; } 

有順序顛倒,應該是:

if (array[y] < array[index_of_min]) 
    { index_of_min = y; } 

另一個解決將是調用變量index_of_max,但我希望排序算法進行排序最小到最大,如果這個期望被大多數程序員分享(正如我所設想的那樣),最不驚訝的原則更需要上述修正。

+0

和故事的寓意(再次!)。在發佈之前測試你的代碼! – UncleO 2009-06-17 19:38:00

0

你說得對。該網站的代碼(如下所示)不正確。

for(int x = 0; x < n; x++) 
    { 
     int index_of_min = x; 
     for(int y = x; y < n; y++) 
     { 
      if(array[index_of_min] < array[y]) /* Here's the problem */ 
      { 
       index_of_min = y; 
      } 
     } 
     int temp = array[x]; 
     array[x] = array[index_of_min]; 
     array[index_of_min] = temp; 
    } 

在內部循環的結尾,for(int y=x; y<n; y++),變量,index_of_min,保持最大值的索引。假設它是設計的來排序從最大到最小陣列,這是一個命名不佳

如果你想在數組排序最小到最大(如人們所期望的),你需要扭轉if語句

if (array[y] < array[index_of_min]) 
{ 
    index_of_min = y; 
} 

享受,

羅伯特C. Cartaino

0

我只是剛剛閱讀了代碼,但它看起來像是對的:index_of_min是錯誤的或者比較是反向的。

這並不像看起來在幾個地方看到這個錯誤那麼奇怪。很有可能每個人都從一個共同的來源複製。

0

從Cprogramming。com「它的工作原理是選擇數組中最小(或最大,如果你想從大到小排序)元素,並將其放在數組的頭部」所以他們有從大到小排序,代碼isent錯誤,也不是變量命名,index_of_min跟蹤數組(0)中的起始點,然後在該數組中向前移動。即index_of_min保持最小的索引值。不要將它與任何該指數的價值混淆。

+0

^^這適用於迭代的前半部分,一旦在嵌套循環中它確實取最大的索引。然而,Index_of_min只要一個新的啓動開始就被分配到數組中下一個最小的索引。 – Trowalts 2009-06-17 19:48:40