私はアルゴリズムの初心者です。私が割り当てとして書いているコードのどこにエラーがあるのか混乱しています。私は配列の等しい値を扱うPython 3でクイックソートアルゴリズムを実装しようとしています。ここで3ウェイクイックソートの実装
はクイックソート機能(アレイ用スタンド)です:
def randomized_quick_sort(a, l, r):
if l >= r:
return
k = random.randint(l, r)
a[l], a[k] = a[k], a[l]
m1, m2 = partition3(a, l, r)
randomized_quick_sort(a, l, m1 - 1);
randomized_quick_sort(a, m2 + 1, r);
そしてここでは、私のパーティション機能です:ここで
def partition3(a, l, r):
x, j, t = a[l], l, r
for i in range(l + 1, r + 1):
if a[i] < x:
j +=1
a[i], a[j] = a[j], a[i]
elif a[i] > x:
a[i], a[t] = a[t], a[i]
t -=1
else:
j +=1
a[l], a[j] = a[j], a[l]
return j, t
タイトルに「3-way」を「stable」と置き換えるか、完全に削除することをお勧めします。あらゆる種類のものは、基本的にそれほど小さくない、等しい、より大きい。ソートアルゴリズムの中には、要素が等しいときに要素の順序を維持するものがあります。これは「安定した」ソート実装と呼ばれます。 3-wayは、3つのリストを1つのリストに連結し、それをソートするよりも効率的な実装で、3つの別々のリストを3-way diffingまたはソートすることを考えさせる。 – IceArdor
@IceArdor:私は、Elenが3-way _partitioning_( "[オランダ国旗問題](https://en.wikipedia.org/wiki/Dutch_national_flag_problem)")を参照していると確信しています。 Wikipediaより: "特に、反復要素に強くなければならない[quicksort](https://en.wikipedia.org/wiki/Quicksort)アルゴリズムの亜種は、指定された数よりも少ない項目をグループ化する3方向分割関数を必要としますキー(赤)、キー(白)、キー(青)より大きい」を選択します。 –