-
ピボットの選択: ランダムなピボットを選択するために、配列の中からランダムな要素を選びます。この方法により、配列が事前にソートされている場合でも、効果的に分割が行われます。
-
ピボットを基準に配列を分割: 選択したランダムなピボットを基準に、配列を2つの部分に分割します。ピボットより小さい要素は左側に配置し、ピボットより大きい要素は右側に配置します。これにより、ピボットの正しい位置が確定します。
-
再帰的なソート: 左側の部分配列と右側の部分配列に対して再帰的にクイックソートを適用します。これにより、各部分配列がソートされ、最終的に全体の配列がソートされます。
以下は、Pythonでのランダムなピボットを使用したクイックソートの例です:
import random
def quicksort(arr):
if len(arr) <= 1:
return arr
else:
pivot = random.choice(arr)
smaller = [x for x in arr if x < pivot]
equal = [x for x in arr if x == pivot]
larger = [x for x in arr if x > pivot]
return quicksort(smaller) + equal + quicksort(larger)
# 使用例
arr = [5, 2, 9, 1, 7, 6, 3]
sorted_arr = quicksort(arr)
print(sorted_arr)
このコードでは、ランダムな要素をピボットとして選び、それを基準に配列を分割しています。再帰的に部分配列をソートすることで、最終的に全体の配列がソートされます。
以上が、ランダムなピボットを使用したクイックソートの効率的な実装方法です。この方法を使用することで、一般的なクイックソートよりも高速なソートが期待できます。