python 算法之桶排序

桶排序(Bucket sort)或所謂的箱排序,是一個排序算法,工作的原理是將數組分到有限數量的桶裏。每個桶再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結果。當要被排序的數組內的數值是均勻分配的時候,桶排序使用線性時間( Θ ( n ) {\displaystyle \Theta (n)} {\displaystyle \Theta (n)}(大O符號))。但桶排序並不是比較排序,他不受到 O ( n log ⁡ n ) {\displaystyle O(n\log n)} {\displaystyle O(n\log n)}下限的影響。

桶排序以下列程序進行:設置一個定量的數組當作空桶子。
尋訪序列,並且把項目一個一個放到對應的桶子去。
對每個不是空的桶子進行排序。
從不是空的桶子裏把項目再放回原來的序列中。
代碼實現

# coding:utf-8

# !/usr/bin/env python

# Time: 2018/8/9 9:31

# Author: sty

# File: bucket_sort.py

def bucket_sort(array, n):
    # 1.創建n個空桶
    new_list = [[] for _ in range(n)]

    # 2.把arr[i] 插入到bucket[n*array[i]]
    for data in array:
        index = int(data * n)
        new_list[index].append(data)

    # 3.桶內排序
    for i in range(n):
        new_list[i].sort()

    # 4.產生新的排序後的列表
    index = 0
    for i in range(n):
        for j in range(len(new_list[i])):
            array[index] = new_list[i][j]
            index += 1
    return array


def main():
    array = [0.897, 0.565, 0.656, 0.1234, 0.665, 0.3434]
    n = len(array)
    array = bucket_sort(array, n)
    print(array)


if __name__ == '__main__':
    main()

轉自:https://blog.csdn.net/sty945/article/details/81530774,如有侵權,請聯繫刪除

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