ホームページ  >  記事  >  バックエンド開発  >  Python アルゴリズム学習バケットソートアルゴリズムの例 (ブロックソート)

Python アルゴリズム学習バケットソートアルゴリズムの例 (ブロックソート)

WBOY
WBOYオリジナル
2016-06-16 08:45:531659ブラウズ

コードをコピー コードは次のとおりです:

# -*-coding: utf-8 -*-

def insert_sort(A):
"""バケット ソートのサブソートとしての挿入ソート"""
n = len(A)
if n return A
B = [] # A:
i = len(B)
の結果リスト
ただし、i > 0 および B[i-1] > a:
i = i - 1
B.insert(i, a);
return B

defbucket_sort(A):
"""バケットのソート、疑似コードは次のとおりです:
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 insert sort // 各バケット内の数値を並べ替えます
6 リスト B[0],B[1],...,B[n-1 ] を連結しますtogether in order // 各バケット内の要素を順番に連結します

バケット ソートは、入力が区間 [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 ランダム import ランダム
from timeit import タイマー

項目 = [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]
test_methods のテスト用:
name = test.__name__ # test.func_name
t = Timer(name + '()', 'from __main__ import ' + name)
print(name + ' 時間がかかります : %f' % t.timeit(1))

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。