Algo-List

ある問いに対する効率的な解法である「アルゴリズム」の解説とPythonによる実装の紹介

バブルソート

バブルソート

 

バブルソート(Bubble Sort)は、簡単で理解しやすいソートアルゴリズムの一つ。隣り合う要素を比較し、大きい方を右に移動させていく操作を繰り返すことで、リストを昇順または降順に並び替える。

 

バブルソートの動作原理

 

  1. リストの先頭から隣り合う2つの要素を比較する
  2. 左側の要素の方が大きければ、2つの要素を交換する
  3. 1と2の操作をリストの末尾まで繰り返す
  4. 1回の操作が終わると、最大値が必ずリストの最後尾に移動する
  5. リストの長さを1つ減らして、上記の操作を繰り返す
  6. リストの長さが1になるまで4と5を繰り返す

 

Pythonによる実装

 

# bubble_sort.py
def bubble_sort(list):
  n = len(list)
  for i in range(n):
    for j in range(0, n-i-1):
      if list[j] > list[j+1]:
        list[j], list[j+1] = list[j+1], list[j]<

  return list

my_list = [64, 34, 25, 12, 22, 11, 90]

print(bubble_sort(my_list))
# [11, 12, 22, 25, 34, 64, 90]

 

探索の早さ

 

バブルソートの時間計算量は、最悪の場合 O(n^2) となる。これは、リストの長さがnの場合、最大で n*(n-1)/2 回の要素の交換が行われる可能性があるためだ。

一方、もしリストが完全に逆順にソートされている場合、最小で n*(n-1)/2 回の交換が必要となる。つまり、平均的な計算量もやはり O(n^2) となる。

このように、バブルソートは非効率的なアルゴリズムだ。しかし、ソースコードが簡単で理解しやすいため、ソートアルゴリズムの学習により適している。実用的なソートアルゴリズムとしては、計算量の優れたクイックソートマージソートが推奨される。