私は同じ要素(1(a)、1(b)、1(c))の配列を使ってクイックソートアルゴリズムの進展を示すために必要なアルゴリズム割り当てに取り組んでいます。 、など)、ピボットは配列の最後の要素です。アルゴリズムの再帰的な部分は私を混乱させるものです。私が考える1(d)になる等しい要素を使ったクイックソートアルゴリズムの進化
1(a) 1(b) 1(c) 1(d) [1(e)]
1(a) | 1(b) 1(c) 1(d) 1(e)
1(a) 1(b) | 1(c) 1(d) 1(e)
1(a) 1(b) 1(c) | 1(d) 1(e)
1(a) 1(b) 1(c) 1(d) | 1(e)
このピボット後と進行は一つ少なく為替を除いて上記と同じで、次のようになります。これまでのところ私は進行しています。私は左と右の再帰呼び出しがどのように動作するのか混乱しています。配列の「右側」の要素は、それ自身で交換されるでしょうか?どの時点でこのアルゴリズムは停止しますか?ここ
は擬似コードである:
QS(A, p, r):
if p < r
q = PARTITION(A, p, r)
QS(A, p, q - 1)
QS(A, q + 1, r)
PARTITION(A, p, r):
x = A[r]
i = p - 1
for j = p to r - 1
if A[j] <= x
i = i + 1
exchange A[i] with A[j]
exchange A[i + 1] with A[r]
return i + 1
Pは、第1の素子アレイ、rは最後の要素です。
ありがとうございました。
質問が不明です。疑似コードは表示されません。 –
私の間違い。ちょうどそれを追加! – tfreiner
ここにいくつかの説明があります:[クイックソートと重複要素](http://stackoverflow.com/questions/13339227/quick-sort-algorithm-improvement-if-more-duplicate-keys)。 – Crocode