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

Python演算法入門——第1章 1,桶排序

假如你有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;
}