鄰居好說話-冒泡排序

冒泡排序

基本思想

交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,若反序即進行交換,直到沒有反序的記錄爲止。

冒泡排序的基本思想是:每次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來。

每次都是比較相鄰的兩個數,如果後面的數比前面的數大,則交換這兩個數的位置。一直比較下去直到最後兩個數比較完畢後,最小的數就在最後一個了。就如同是一個氣泡,一步 一步往後“翻滾”,直到最後一位。

每將一個數歸位我們將其稱爲“一趟”。

總結

如果有 n 個數進行排序,只需將 n-1 個數歸位,也就是說要進行 n-1 趟操作。而“每一 趟”都需要從第 1 位開始進行相鄰兩個數的比較,將較小的一個數放在後面,比較完畢後向後挪一位繼續比較下 面兩個相鄰數的大小,重複此步驟,直到最後一個尚未歸位的數,已經歸位的數則無需再進行比較。

編碼

#include <stdio.h> 
int main()
{
    int a[100],i,j,t,n;
    
    scanf("%d",&n); 
    for(i=1;i<=n;i++) 
        scanf("%d",&a[i]);

    //冒泡排序的核心部分
    //n個數排序,只用進行n-1趟
    for(i=1;i<=n-1;i++)  {
        //從第1位開始比較直到最後一個尚未歸位的數,想一想爲什麼到n-i就可以了。
        for(j=1;j<=n-i;j++)  {
            if(a[j]<a[j+1]) { 
                t=a[j]; 
                a[j]=a[j+1]; 
                a[j+1]=t; 
            } 
        }
    }
    
    for(i=1;i<=n;i++) 
        printf("%d ",a[i]); 
    getchar();getchar(); 
    return 0;
}

冒泡排序的核心部分是雙重嵌套循環。

時間複雜度是 O(N2)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章