![](/img/trans.png)
[英]I can't get my program to read the values from my input file correctly (2D array)
[英]Can't get my code to correctly sort user input array of numbers (using recursion)
为了我的一生,我无法使此代码正确排序。 这是一种递归实践,通过对用户输入的五个数字进行排序,然后显示从最小到最大的五个数字。 它可以正确执行大多数操作,但偶尔会弄乱第一个或最后一个数字,并与数组中的另一个数字切换。 我知道问题出在哪里呢是在交换功能中,在第二个“如果”的声明,但我无法弄清楚如何解决它,我真的很感激一些方向如何继续。 这是我的代码:
#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);
}
编辑:使您的代码工作,但忘记了最重要的部分,即:
您正在将索引与数组值进行比较,请使用:
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++)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.