1. 程式人生 > >Python演算法入門——第1章 2,氣泡排序

Python演算法入門——第1章 2,氣泡排序

上一篇文章已經說過,桶排序會極大地浪費資源,因此需要用一種更簡單的排序方式來完成:氣泡排序。其原理是1.從第一個數字開始,與第二個數進行比較,如果小於第二個數(按從大到小排序),則將其交換數值;2.接著,第二個數與第三個數比較,重複此步驟,直至完成與最後一個數的比較。這樣,第一個數就到了它應該呆的地方。但是其他數仍在相對位置沒有變動,所以我們仍要重複步驟1,與步驟2.直至所有數字都去到它們該呆的地方,下面是Python程式碼的實現:

class Solution():
    '''
    氣泡排序
    從大到小排序
    '''
    def MaoPao(self,x):
        #有多少數字,迴圈多少次
        for i in range(len(x)):
            #依次讀取列表x裡面的資料,並與下一個數進行比較
            for j in range(len(x)-1):
                #如果小於下一個數,就將兩個數交換位置
                if x[j] < x[j+1]:
                    x[j], x[j+1] = x[j+1], x[j]
        return x

if __name__ == "__main__":
    a = Solution()
    print(a.MaoPao([1,2,3,4,5,6,7]))

 

下面附上《啊哈!演算法》的C語言實現:

#include <stdio.h>
int main()
{
    int a[100],i,j,t,n;
    scanf("%d",&n); //輸入一個數n,表示接下來有n個數
    for(i=1;i<=n;i++) //迴圈讀入n個數到陣列a中
        scanf("%d",&a[i]);//氣泡排序的核心部分
        for(i=1;i<=n-1;i++) //n個數排序,只用進行n-1趟
        {
            for(j=1;j<=n-i;j++) //從第1位開始比較直到最後一個尚未歸位的數,想一想為什
            麼到n-i就可以了。
            {
                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;
}

其實Python完全不用這麼麻煩,一個sort函式就可以完成排序,而且氣泡排序極大地浪費了時間。