我一整天都在研究这个问题,但不知道我错过了什么。不想来这里寻求帮助,但我不得不这么做。
练习应该通过引用获取三个 int 参数,并将它们的值按升序排序,以便第一个参数具有最低值,第二个参数具有中间值,第三个参数具有最高值。
代码编译良好,但数字不按顺序排列。它会跳过我的函数,只显示直接来自 main 的变量。
#include <iostream>
using namespace std;
//Function prototype
void smallSort(int&, int&, int&);
//Main
int main()
{
int a = 100, b = 25, c = 20;
smallSort(a, b, c);
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
void smallSort(int &valu1, int &valu2, int &valu3)
{
int tempVal1 = 0, tempVal2 = 0, tempVal3 = 0;
if (valu1 > valu2 && valu1 > valu3)
{
tempVal1 = valu1;
valu1 = tempVal1;
if (valu2 > valu3)
{
tempVal2 = valu2;
tempVal3 = valu3;
valu2 = tempVal2;
valu3 = tempVal3;
}
else if (valu3 > valu2)
{
tempVal2 = valu3;
tempVal3 = valu2;
valu2 = tempVal3;
valu3 = tempVal2;
}
}
else if (valu2 > valu1 && valu2 > valu3)
{
tempVal1 = valu2;
valu2 = tempVal1;
if (valu1 > valu3)
{
tempVal2 = valu1;
tempVal3 = valu3;
valu1 = tempVal2;
valu3 = tempVal3;
}
else if (valu3 > valu1)
{
tempVal2 = valu3;
tempVal3 = valu1;
valu3 = tempVal2;
valu1 = tempVal3;
}
else if (valu3 > valu1 && valu3 > valu2)
{
tempVal1 = valu3;
valu3 = tempVal1;
if (valu2 > valu1)
{
tempVal2 = valu2;
tempVal3 = valu1;
valu2 = tempVal2;
valu1 = tempVal3;
}
else if (valu1 > valu2)
{
tempVal2 = valu1;
tempVal3 = valu2;
valu1 = tempVal2;
valu2 = tempVal3;
}
}
}
}
你的功能太复杂了。 这也是错误的,因为至少它没有考虑到变量可以彼此相等。
它可以如下所示,如该演示程序所示。它使用冒泡排序方法。
#include <iostream>
void smallSort( int &valu1, int &valu2, int &valu3 )
{
if ( valu2 < valu1 )
{
int tmp = valu1;
valu1 = valu2;
valu2 = tmp;
}
if ( valu3 < valu2 )
{
int tmp = valu2;
valu2 = valu3;
valu3 = tmp;
}
if ( valu2 < valu1 )
{
int tmp = valu1;
valu1 = valu2;
valu2 = tmp;
}
}
int main()
{
int a = 2, b = 3, c = 1;
std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
smallSort( a, b, c );
std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
}
程序输出为
a = 2, b = 3, c = 1
a = 1, b = 2, c = 3
也可以代替这样的代码块
if ( valu2 < valu1 )
{
int tmp = valu1;
valu1 = valu2;
valu2 = tmp;
}
您可以使用标准功能
std::swap
。例如
if ( valu2 < valu1 ) std::swap( valu2, valu1 );
在这种情况下,该函数看起来像
#include <iostream>
#include <utility>
void smallSort( int &valu1, int &valu2, int &valu3 )
{
if ( valu2 < valu1 ) std::swap( valu2, valu1 );
if ( valu3 < valu2 ) std::swap( valu3, valu2 );
if ( valu2 < valu1 ) std::swap( valu2, valu1 );
}
//...
我认为公平地说你有有点过于复杂,但没关系。
我认为如果您一次只比较两个整数,它可能会帮助您压缩代码,这样您就不必在尽可能多的逻辑中进行硬编码。 我在谷歌上快速搜索了源代码,发现了这个:https://codereview.stackexchange.com/questions/64758/sort- Three-input-values-by-order 请务必查看该帖子的评论,因为它们也应该对您有所帮助。
此外,通过 google 查找源代码非常容易,它会对您有很大帮助,尤其是当您仍在学习时!
C++11 替代方案
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;
int main() {
array<int, 3> arr = { 100, 25, 20 };
sort(arr.begin(), arr.end());
for (int & i : arr) cout << i << endl;
}
输出
20
25
100
作为一名经常面临编程任务挑战的学生,我发现新作业帮助非常有用。他们的专家提供了全面而精确的作业,并根据我的要求进行了定制。将编程作业帮助集成到他们的工作流程中非常顺利,他们的支持使我能够掌握代码背后的逻辑。由于他们的帮助,我注意到我的技能得到了显着提高。如果您正在寻求可靠的帮助,这项服务当然值得考虑!