バブルソート
バブルソート (bubble sort) は、ソートのアルゴリズムの一つ。隣り合う要素の大小を比較しながら整列させること。最悪計算時間がO(n2)と遅いが、アルゴリズムが単純で実装が容易なため、また並列処理との親和性が高いことから、しばしば用いられる。安定な内部ソート。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
「配列の先頭から最後まで、自身と次の要素を比較して、正しい順序関係にない場合は互いを交換する」という処理を繰り返します。
例えば数値を昇順にソートする時、最も大きい数値が先頭にあったら、次の要素との交換が繰り返され、泡がどんどん上に登っていくようなイメージで、最も大きい数字は一番最後まで移動します。
その後は、一番最後に移動した要素は除き、先頭から同じ処理を繰り返します。
また、ループを回した際に要素の交換が発生しない場合は、整列が終了しているので、その場合はフラグを用いてソートを終了することができます。
平均計算時間、最悪計算時間ともに\( O (N ^ 2) \) です。
Python で実装
バブルソートを Python で実装します。
import random def bubble_sort(array): # ソート済みかの判定フラグ swapped = False for i in range(len(array)): if swapped: return array swapped = True for k in range(len(array) - 1, i, -1): if (array[k] < array[k - 1]): swap(array, k, k - 1) # 一度でも swap すればソート済みではない swapped = False return array def swap(array, x, y): array[y], array[x] = array[x], array[y] if __name__ == '__main__': # ランダムな配列の生成 random.seed(1) array = [random.randrange(100) for i in range(10)] print('未ソート', array) # 未ソート [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] print('ソート済み', bubble_sort(array)) # ソート済み [8, 15, 17, 32, 57, 60, 63, 72, 97, 97]