Python演算法入門——第1章 1,桶排序
阿新 • • 發佈:2018-11-11
假如你有7個數需要排序,最大的數為100,那麼你就需要101個桶,桶的編號為0-100。你的數列中的數是多少,就往對應的桶裡面加一,最後按照順序列印桶的編號即可。但此排序方式浪費資源極大,資料量大的時候不建議使用,本文只是介紹最基本的演算法實現原理,作為入門使用。
class Solution(): ''' 對輸入的列表進行排序 桶排序 ''' def paixu(self, x): #讀取數列中的最大數,從而知道需要幾個桶 max_num = max(x) #a作為桶來記錄對應數值的多少 a = list() #用來記錄桶的編號,便於列印數字 m = -1 #將所有桶清空,共需要max_num+1個桶 for i in range(max_num+1): a.append(0) #如果痛的編號與給入的數值相等,則將桶內的數字加一 for j in range(max_num+1): for item in x: if j == item: a[j] += 1 #將桶內的數字列印 for i_j in a: m += 1 for j_i in range(i_j): print(m) if __name__ == "__main__": a = Solution() a.paixu([0,4,100,6,9,5,4,20])
本文是借鑑《啊哈!演算法》,將其用c語言實現的程式碼轉換為Python來實現,附上c語言程式碼,輸入資料為5,3,5,2,8
#include <stdio.h> int main() { int a[11],i,j,t; for(i=0;i<=10;i++) a[i]=0; //初始化為0 for(i=1;i<=5;i++) //迴圈讀入5個數 {scanf("%d",&t); //把每一個數讀到變數t中 a[t]++; //進行計數 } for(i=0;i<=10;i++) //依次判斷a[0]~a[10] for(j=1;j<=a[i];j++) //出現了幾次就列印幾次 printf("%d ",i); getchar();getchar(); //這裡的getchar();用來暫停程式,以便檢視程式輸出的內容 //也可以用system("pause");等來代替 return 0; }