C ++中的冒泡排序(ASC)

时间:2018-10-31 01:33:27

标签: c++ bubble-sort

我看过一个有关对数组进行气泡排序的教程。

这是使用的代码:

    int main()
    {
        int numbers[5];
    int asc;

    //input 5 integers
    cout << "Enter 5 Numbers : \n";
    for (int i = 0; i < 5; ++i) {
        cin >> numbers[i];
    }

    for (int i = 0; i < 5; ++i)   //  outer loop
    {
        for (int a = i + 1; a < 5; ++a) // inner loop
        {
            if (numbers[i] > numbers[a]) 
            {
                asc = numbers[i];
                numbers[i] = numbers[a]; // swapping
                numbers[a] = asc;
            }
        }
    }
    cout << endl << "Ascending Order : ";
    for (int i = 0; i < 5; ++i)
    {
        cout << numbers[i] << " ";
    }
    return 0;
}

我试图理解每一行,但是我陷入了外循环,内循环和交换部分,在那部分我有点困惑。

有帮助吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

让输入为5、1、4、2、8。

由于5> 1,(数字[i]>数字[i] +1)

在执行交换之前,您将需要一个变量来临时存储number [i]的值,在这种情况下,变量为asc。

当asc存储number [i]的值时,number [i + 1]的值将替换number [i]的原始值,而asc的值将替换number [i + 1]的值。这样,两个数字的值交换就完成了。

需要多次回合气泡排序才能对数组进行完全排序。下面的示例直观地展示了气泡排序算法的工作原理。

第一轮冒泡排序:

  

5 1 4 2 8)–>( 1 5 4 2 8),此处,算法比较前两个元素,并从5> 1开始交换。

     

(1 5 4 2 8)–>(1 4 5 2 8),从5> 4开始交换

     

(1 4 5 2 8)–>(1 4 2 5 8),从5> 2开始交换

     

(1 4 2 5 8)–>(1 4 2 5 8),现在,由于这些元素已经按顺序(8> 5),因此算法不会交换它们。

气泡排序第二轮:

  

(1 4 2 5 8)–>(1 4 2 5 8)

     

(1 4 2 5 8)–>(1 2 4 5 8),从4> 2开始交换

     

(1 2 4 5 8)–>(1 2 4 5 8)

     

(1 2 4 5 8)–>(1 2 4 5 8)