ソートアルゴリズムは、データを特定の順序に並べ替えるための手法です。本教材では、クイックソートとマージソートの2つの代表的なソートアルゴリズムについて、Pythonでの実装を通じて理解を深めます。
クイックソートは、分割統治法に基づくソートアルゴリズムです。以下の手順で動作します。
以下にクイックソートの実装を示します。
def quicksort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[len(arr) // 2] # ピボットを中央の要素に設定
left = [x for x in arr if x < pivot] # ピボットより小さい要素
middle = [x for x in arr if x == pivot] # ピボットと等しい要素
right = [x for x in arr if x > pivot] # ピボットより大きい要素
return quicksort(left) + middle + quicksort(right)
# 使用例
arr = [3, 6, 8, 10, 1, 2, 1]
sorted_arr = quicksort(arr)
print("クイックソート結果:", sorted_arr)
quicksort
関数は、リストarr
を引数に取り、ソートされたリストを返します。left
: ピボットより小さい要素middle
: ピボットと等しい要素right
: ピボットより大きい要素マージソートも分割統治法を用いたソートアルゴリズムです。以下の手順で動作します。
以下にマージソートの実装を示します。
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2 # 中央のインデックス
left_half = merge_sort(arr[:mid]) # 左半分を再帰的にソート
right_half = merge_sort(arr[mid:]) # 右半分を再帰的にソート
return merge(left_half, right_half)
def merge(left, right):
merged = []
left_index, right_index = 0, 0
# マージ処理
while left_index < len(left) and right_index < len(right):
if left[left_index] < right[right_index]:
merged.append(left[left_index])
left_index += 1
else:
merged.append(right[right_index])
right_index += 1
# 残りの要素を追加
merged.extend(left[left_index:])
merged.extend(right[right_index:])
return merged
# 使用例
arr = [3, 6, 8, 10, 1, 2, 1]
sorted_arr = merge_sort(arr)
print("マージソート結果:", sorted_arr)
merge_sort
関数は、リストarr
を引数に取り、ソートされたリストを返します。merge
関数は、2つのソートされたリストを引数に取り、それらをマージします。merge
関数内では、2つのリストを比較しながら新しいリストmerged
を作成し、残りの要素も追加します。クイックソートとマージソートは、どちらも効率的なソートアルゴリズムですが、特性や使用する場面が異なります。クイックソートは通常、平均ケースでO(n log n)の時間計算量を持ち、マージソートはO(n log n)ですが、安定なソートが必要な場合に適しています。これらのアルゴリズムを理解し、使い分けることで、より効率的なデータ処理が可能になります。