複製** **如下:
# -*- coding: utf-8 -*-
def insertion_sort(a):
"""插入排序,作為桶排序的子排序"""
n = len(a)
if n <= 1:
return a
b = # 結果列表
for a in a:
i = len(b)
while i > 0 and b[i-1] > a:
i = i - 1
b.insert(i, a);
return b
def bucket_sort(a):
"""桶排序,偽碼如下:
www.cppcns.com bucket-sort(a)
1 n ← length[a] // 桶數
2 for i ← 1 to n
3 do insert a[i] into list b[floor(na[i])] // 將n個數分布到各個桶中
4 for i ← 0 to n-1
5 do sort list b[i] with insertion sort // 對各個桶中的數進行排序
6 concatenate the lists b[0],b[1],...,b[n-1] together in ordelioiwr // 依次串聯各桶中的元素
桶排序假設輸入由乙個隨機過程產生,該過程將元素均勻地分布在區間[0,1)上。
"""n = len(a)
buckets = [ for _ in xrange(n)] # n個空桶
for a in a:
buckets[int(n * a)].append(a)
b =
for b in buckets:
b.extend(insertion_sort(b))
return b
if __name__ == '__main__':
from random import random
from timeit import timer
items = [random() for _ in xrange(10000)]
def test_sorted():
print(items)
sorted_items = sorted(items)
print(sorted_items)
def test_bucket_sort():
print(items)
sorted_items = bucket_sort(items)
print(sorted_items)
test_methods = [test_sorted, test_bucket_sort]
for test in test_methods:
name = test.__name__ # test.func_name
t = timer(name + '()', 'from __main__ import ' + name)
print(name + ' takes time : %f' % t.timeit(1))
本文標題: python演算法學習之桶排序演算法例項(分塊排序)
本文位址: /jiaoben/python/102879.html
演算法學習03 桶排序
首先遍歷陣列,找到最大值與最小值,設定乙個長度為最大值 最小值 1的陣列,再次遍歷這個陣列,以當前值 最小值作為下標,將該下標的計數器增1。掃瞄一遍計數器陣列,按順序將值收集起來。舉個例子 nums 2,4,3,4,7 遍歷一次陣列,找到陣列元素的最小值與最大值分別為2和7,那麼我們設定乙個長度為7...
演算法之桶排序
桶排序是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。桶排序 bucket sort 的工作的原理 假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排 注意,如果遞迴使用桶排序為各個...
演算法之桶排序
思想 正如網上大部分文章所說,桶排序就是把原始陣列的資料防放入各個桶中。然後對桶再排序,然後把每個桶的資料依次輸出到原始陣列就可以了,我自己寫了個簡陋版本的,不求效率,只求簡易實現。我自己寫這個效率很低,有時間再改進吧。public class bucketsort long a system.cu...