簡體   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