十大排序--冒泡排序

十大排序

冒泡排序

對於數組[5,9,3,1,2,8,4,7,6]

5 9 3 1 2 8 4 7 6

第一輪比較

首先比較7和6

因爲6<7

所以交換位置,交換後變成[5,9,3,1,2,8,4,6,7]

接着比較6和4

因爲4<6,位置不變,[5,9,3,1,2,8,4,6,7]

再接着比較4和8

因爲4<8,交換位置,交換後變成[5,9,3,1,2,4,8,6,7]

接着比較2和4

因爲2<4,位置不變,[5,9,3,1,2,4,8,6,7]

按照這個過程,直到最小的那個數字,放在數組首位

此時數組爲[1,5,9,3,2,4,8,6,7]

第二輪比較

首先比較6和7

因爲6<7,位置不變,[1,5,9,3,2,4,8,6,7]

接着比較8還和6

因爲6<8,交換位置,交換後變成[1,5,9,3,2,4,6,8,7]

依次進行比較,直到2排到1的後邊

此輪比較結束,此時數組爲[1,2,5,9,3,4,6,8,7]

第三輪比較

經過第三輪比較,數組爲[1,2,3,5,9,4,6,7,8]

第四輪比較

經過第四輪比較,數組爲[1,2,3,4,5,9,6,7,8]

第五輪比較

經過第五輪比較,數組爲[1,2,3,4,5,6,9,7,8]

第六輪比較

經過第六輪比較,數組爲[1,2,3,4,5,6,7,9,8]

第七輪比較

記過第七輪比較,數組爲[1,2,3,4,5,6,7,8,9]

第八輪比較

經過第八輪比較,得出最終的排序[1,2,3,4,5,6,7,8,9]

冒泡排序總結

假如有N個數,那麼需要比較N-1次纔可以得出結果

每一輪的比較,都可以將最小的數排到最前面

冒泡排序代碼實現

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    int num;
    cin>>num;
    int a[num];
    memset(a,0,sizeof(a));
    for (int i = 0; i < num; ++i) {
        cin>>a[i];
    }
    for (int i = 0; i < num-1; ++i) {
        for (int j = num-1; j > i; --j) {
            int tmp;
            if (a[j]<a[j-1]){
                tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
            }
        }
    }
    for (int i = 0; i < num; ++i) {
        cout<<a[i]<<" ";
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章