C ++ - 希望对此排序代码有所帮助

时间:2015-07-14 21:59:36

标签: c++ sorting integer

_

当按以下顺序输入值时,此程序有效:

1,2,3

1,3,2

3,1,2

但不适用于:

2,3,1

3,2,1

2,1,3

任何想法我在这里做错了什么?我喜欢一些帮助,因为这已经让我感到厌倦了一段时间。

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()