2013-08-26 74 views
-3

我想在C++中實現選擇排序。我不知道我在這段代碼中做了什麼錯誤,但結果沒有正確排序。 請讓我知道我做錯了什麼。感謝您的幫助。選擇排序輸出不正確

輸出結果: 23 31 4 89 2 8 10 11

#include <iostream> 

using namespace std; 

void printElement(int arr[],int size) 
{ 
    for(int i = 0; i < size; i++) 
     cout << arr[i] << " ";    
} 


// arr[] = {31, 23, 4, 89, 2, 8, 10, 11} 
void selectionSort(int arr[], int size) 
{  
    int i, j, min, min_id, tmp; 

    for(i = 0; i < size-1; i++){ 
     min = arr[i]; 
     for(int j = i + 1; j < size; j++){ 
      if (arr[j] < min){ 
       min = arr[j]; 
       min_id = j; 
      } 
      tmp = arr[i]; //tmp = min; - this is wrong by msl 
      arr[i] = arr[min_id]; //min = arr[min_id]; this is wrong by msl 
      arr[min_id] = tmp; 
     } 
     printElement(arr, size); 
     cout << endl; 
    } 
} 


int main() 
{ 
    int size = 8; 
    int arr[] = {31, 23, 4, 89, 2, 8, 10, 11}; 
    selectionSort(arr, size); 
    printElement(arr, size); 

    system("PAUSE"); 
    return 0; 
}  
+3

嗨。要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後,如果有必要,您應該構建一個[最小測試用例](http://sscce.org)。) –

+5

瞭解如何使用調試器。你不可能總是能夠將你的代碼轉儲到另一個人的膝上,並要求「告訴我什麼是錯的」,他們並不總是能夠並願意回答。 – Jon

+1

從它的外觀來看,每次你設置'min',你都想設置'min_id',但是你不想。 –

回答

1
tmp = arr[i]; //tmp = min; - this is wrong by msl 
    arr[i] = arr[min_id]; //min = arr[min_id]; this is wrong by msl 
    arr[min_id] = tmp; 

以上是在循環的錯誤的部分地方。在選擇排序中,交換髮生在外部循環中 - 而不是內部循環。

+0

尊敬的GreatWolf:您的回覆是正確的。謝謝你的善意和幫助。 Kelly – Happy

+0

@happy請記住,您可以點擊綠色複選標記來接受此答案。 – greatwolf