以下は、Hoare
与えられたピボットに基づいて配列を分割するために私が書いた分割アルゴリズムです (この場合、それは配列の最初の要素であり、かなり悪い選択です!)。ただし、Bentley-McIlroy 3-way partitioning
http ://www.sorting-algorithms.com/static/QuicksortIsOptimal.pdfでは、キーの数が等しい場合にパフォーマンスが向上すると主張しています。Hoare
9ページのコードが何を達成するのか、なぜアルゴリズムよりも優れたパフォーマンスを発揮するのか、簡単に説明できる人はいますか? <
そして、1 つの質問として、パーティショニングは、=
およびに基づいて要素を配置し>
ます。複数回存在する要素がピボットでない場合はどうなりますか?
def hoare(arr,start,end):
pivot = arr[start]
i,j = start,end
while i < j:
while i < j and arr[i] <= pivot:
i += 1
while j >= i and arr[j] > pivot:
j -= 1
if i < j:
arr[i],arr[j] = arr[j],arr[i]
arr[start],arr[j] = arr[j],arr[start]
return j