1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで学ぶアルゴリズム 第23弾:並べ替え(ビンソート / バケットソート)

1
Posted at

#Pythonで学ぶアルゴリズム< ビンソート / バケットソート >

はじめに

基本的なアルゴリズムをPythonで実装し,アルゴリズムの理解を深める.
その第23弾としてビンソート(バケットソート)を扱う.

ビンソート(バケットソート)

ビンソートはバケットソートとも呼ばれる.以降ビンソートと呼ぶこととする.

ビンソート: 並べ替える要素が限定されているときに用いられるソート方法.

データ内に各要素がいくつあるのかをカウントし,そのカウント数を使って,並べ替える.そのイメージ図を次に示す.
image.png

実装

先ほどの説明をもとにPythonでの実装を行った.なお,参考文献では,決まった要素の参照リストが利用されているが,その参照リストも変えられるような実装を試みた.そのソースコードとそのときの出力を以下に示す.

ソースコード
"""
2021/01/27
@Yuya Shimizu

ビンソート
"""

def bin_sort(data, data_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]):
    """ 参照リストの要素がデータにいくつあるのかをカウントし,順に並べていく """
    sorted_data = []    #結果を格納する配列

    for i in data_list: #要素を基準にカウントを行う
        count = 0       #カウントするための変数

        for j in data:  #各データについて調べる
            if j == i:
                count += 1  #要素が含まれていればカウント
                
        [sorted_data.append(i) for k in range(count)]   #順にカウント分だけその要素を結果として配列に格納
        
    return sorted_data

if __name__ == '__main__':
    DATA = [9, 4, 5, 2, 8, 3, 7, 8, 3, 2, 6, 5, 7, 9, 2, 9]
    data_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    sorted_data = bin_sort(DATA, data_list)
    print(f"参照リスト: {data_list}\n\n{DATA}{sorted_data}")
出力
参照リスト: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[9, 4, 5, 2, 8, 3, 7, 8, 3, 2, 6, 5, 7, 9, 2, 9] → [2, 2, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 9, 9]

ソースコード内で定義している関数では,第2引数に参照リストを渡せるが,デフォルトでは[0,1,2,3,4,5,6,7,8,9]となるようにしている.そのため,参照リストを変更するときは,関数を扱うときに第2引数にリストの型で指定すればよい.

感想

ついに,並べ替えアルゴリズムを終えた.少し長かったが,今後役立つと願おう.今回のビンソートは参考文献における"理解度check"の問題であり,様々な書き方があるとは思うが,今の私が思いつく良い方法を示した.次回からも参考文献に沿って学習を進める.残るは後1章分.また楽しみである.

参考文献

Pythonで始めるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
                         増井 敏克 著  翔泳社

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?