繁体   English   中英

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

[英]Bubble sort in c++ (asc)

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

这是使用的代码:

    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;
}

我试图理解每一行,但我被困在外循环、内循环和交换部分,我对那部分有点困惑。

有什么帮助吗? 提前致谢!

假设输入为 5、1、4、2、8。

由于 5 > 1, (number[i] > number[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 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM