Python演算法入門——第1章 2,氣泡排序
阿新 • • 發佈:2018-11-11
上一篇文章已經說過,桶排序會極大地浪費資源,因此需要用一種更簡單的排序方式來完成:氣泡排序。其原理是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函式就可以完成排序,而且氣泡排序極大地浪費了時間。