_
当按以下顺序输入值时,此程序有效:
1,2,3
1,3,2
3,1,2
但不适用于:
2,3,1
3,2,1
2,1,3
任何想法我在这里做错了什么?我喜欢一些帮助,因为这已经让我感到厌倦了一段时间。
答案 0 :(得分:2)
我认为你可能会对if语句在C ++中的工作方式感到困惑。如果你想要多个条件都必须为真,以便执行代码,你需要使用&&而不是逗号。逗号执行不同的操作,它们执行多个语句但仅使用最后一个语句进行评估。 Read this article,特别是标题为“逻辑运算符”和“逗号运算符”的部分。
总之,对于每个if语句,用&&替换逗号。但是,这并没有解决您的排序算法不是很可扩展的事实,因为您已经对每个可能的场景进行了硬编码。查找一些真实的sorting algorithms。
答案 1 :(得分:0)
你正在使用像Jordan这样的逗号,数组以C ++中的索引0开头。然后,如果声明一个大小为3的数组,它的第一个值将是数组[0],最后一个数组是数组[2]
进行排序试试这个:
int sortArray[3];
sortArray[0] = 3;
sortArray[1] = 2;
sortArray[2] = 1;
//sort ascending
//double check
for( int i = 0; i< 3 ; i++)
{
for( int j = 2/*size -1*/; j > 0 ; j--)
{
if (sortArray[j-1] > sortArray[j])
{
int temp = sortArray[j];
sortArray[j] = sortArray[j-1];
sortArray[j-1] = temp;
}
}
}
// printf("Values sorted are: %d, %d, %d\n", sortArray[0], sortArray[1], sortArray[2]);
//use cout to print
cout <<"Values sorted are: "<<sortArray[0]<< sortArray[1]<< sortArray[2];
答案 2 :(得分:0)
您应该在条件语句中将,
替换为&&
。
即,
if (val1 > val2 && val3) {
请注意,有很多方法可以排序:Quicksort,Merge sort,Insertion sort,Heapsort和bubble sort。您可以在c ++中找到它们的样本进行练习。
还有一个内置库sort()
。