再帰ソートの決定木を作成する方法を誰かが理解するのを手伝ってくれるかどうか疑問に思っていました。たとえば、バブルソートや挿入ソートでそれを行う方法を理解しています。ただし、再帰的な並べ替えとなると、私には想像できません。擬似コードが次のような場合:
if length == 1
return;
else
int elem = head of array;
array tail = tail of array;
recursive sort;
if (elem <= head of sorted list)
add elem to the beginning of sorted list
else
swap elem and first element of sorted list
sort smaller list again
add elem to the beginning of sorted list
return
私の最初の考えでは、決定木は次のようになります。
A, B, C
yes / \ no is length <= 1?
/ \
remove head
/ \
A B, C
yes / \ no is length <= 1?
/ \
remove head
/ \
B C
yes / \ no is length <= 1?
/ \
B:C
/ \
B,C C,B
| |
A:B,C A:C,B
/ \ / \
A,B,C B:A,C A,C,B C:A,B
/ \ / \
B,A,C A:B,C C,A,B A:C,B
私は明らかにどこかで間違っていると思います。私はここで正しい軌道に乗っていますか?
あなたが私に与えることができる指針をありがとう。