我将开始新的问题。我昨天提出了问题,想知道我的程序出了什么问题。该程序在下面给出,并且您指出此后一个程序仅执行一次排序,并且还需要一个外部循环。那时我还不错。但是,当我再次查看该程序时,我感到困惑,需要询问为什么我们还需要外部循环进行排序,因为只有一个循环可以进行排序(我认为)。首先查看下面的程序,然后在程序末尾介绍我的逻辑。

#include <iostream.h>
#include <conio.h>

using namespace std;

main()
{

    int number[10];
    int temp = 0;
    int i = 0;

    cout << "Please enter any ten numbers to sort one by one: "
         << "\n";

    for (i = 0; i < 10; i++)
    {
        cin >> number[i];
    }

    i = 0;

    for (i = 0; i < 9; i++)
    {

        if (number[i] > number[i + 1])
        {
            temp = number[i + 1];
            number[i + 1] = number[i];
            number[i] = temp;
        }
    }
    i = 0;
    cout << "The sorted numbers are given below:"
         << "\n";

    for (i = 0; i < 10; i++)
    {
        cout << number[i] << "\n";
    }

    getch();
}

我认为带有气泡条件的ONLY循环应该进行排序。查看程序的以下循环:
for (i=0;i<9;i++)
if(number[i]>number[i+1])
{
    temp=number[i+1];
    number[i+1]=number[i];
    number[i]=temp;

}

现在,我解释我在想这个循环“应该”做什么。首先将数字[0]与数字[1]比较。如果条件满足,它将执行IF语句主体中的操作。然后我将增加1(i++)。然后,在下一次迭代中,比较的值将为number [1]与number [2]。那么为什么不发生这种情况,而循环仅在通过之后退出呢?换句话说,可能是我正在尝试询问IF语句是否不在for循环中重复自身?我认为确实如此。我非常感谢您的帮助和提出的意见,我的问题可能很小,但这就是我将如何发展。

最佳答案

让我举一个例子,让我们只取3个数字。所以你输入

13, 3 ,1

现在,您开始对操作方式进行排序。所以它比较13和313 > 3,因此将它们都切换。
现在我们有了。
3, 13, 1

现在,它将按照您所说的进行比较,下一对= 13和113 > 1,因此新订单将是
3, 1, 13

现在您的循环完成了,您错过了比较3和1
实际上,第一个循环只会排序最大的数字!

关于c++ - 为什么冒泡排序需要嵌套循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12259622/

10-12 12:19
查看更多