2017-02-11 35 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++)