2017-02-11 28 views
0

對於我的生活,我無法讓這段代碼正確排序。這是一個遞歸實踐,通過對用戶輸入的五個數字進行排序,然後從最小到最大顯示這五個數字。它大部分都是正確的,但偶爾它會把第一個或最後一個數字弄亂,然後用數組中的另一個數字切換它。我知道問題出在交換的功能之內,在第二個'if'語句中,但我無法弄清楚如何解決它,我真的很感謝方向至於如何繼續。這是我的代碼:無法讓我的代碼正確地排序用戶輸入的數組數組(使用遞歸)

#include <iostream> 
#include <array> 

using namespace std; 

void mySort(int nums[], int first, int size); 

int main() 
{ 
    int fiveNumbers[5]; 
    int firstNum = 0; 
    int size = 5; 
    cout << "Please enter five numbers, pressing enter after each.\n\n"; 
    for (int i = 0; i < 5; i++) 
    { 
     cout << "Enter a number: "; 
     cin >> fiveNumbers[i]; 
     cout << endl; 
    } 

    mySort(fiveNumbers, firstNum, size); 

    for (int i = 0; i < size; i++) 
    { 
     cout << fiveNumbers[i] << endl; 
    } 

    system("PAUSE"); 
    return 0; 
} 

void mySort(int nums[], int first, int size) 
{ 
    if (size == 0) 
    { 
     return; 
    } 
    for (int i = 0; i < 5; i++) 
    { 
     if (first < nums[i]) 
     { 
      swap(nums[first], nums[i]); 
     } 
    } 
    first++; 
    size--; 
    return mySort(nums, first, size); 
} 

改變了我的功能,以反映陣列AT點「第一」的值,而不是變量「第一」本身。到目前爲止,它每次都有效!

void mySort(int nums[], int first, int size) 
{ 
    if (size == 0) 
    { 
     return; 
    } 
    for (int i = 0; i < 5; i++) 
    { 
     if (nums[first] < nums[i]) 
     { 
      swap(nums[first], nums[i]); 
     } 
    } 
    first++; 
    size--; 
    return mySort(nums, first, size); 
} 
+2

您需要[進行緊急約見你的橡皮鴨(https://en.wikipedia.org/wiki/ Rubber_duck_debugging)並向你的橡皮鴨解釋你的算法。因爲在你的算法中,同一個值first將用作比較「first

+0

啊哈!疑難雜症。我正在使用變量'first'而不是數組AT'首先'的點。感謝您幫助初學者! –

回答

0

編輯:有你的代碼工作,但忘了最重要的部分,即:

你的指數比較數組值,使用:

if (nums[first] < nums[i]) 

相反的:

if (first < nums[i]) 

此外,您總是開始交換時,你應該開始一個過去first

相反的:

for (int i = 0; i < 5; i++) 

你想:

for (int i = first + 1; i < 5; i++) 
相關問題