Skiena の Algorithm Design Manual を読んでいましたが、この問題を解決できませんでした。
配列 A が n 個の要素で構成され、それぞれが赤、白、または青であるとします。すべての赤がすべての青よりも前に来るように、すべての赤がすべての白よりも前に来るように、要素を並べ替えようとします。
Examine(A,i) { report the color of the ith element of A.
Swap(A,i,j) { swap the ith element of A with the jth element.
赤白青の並べ替えのための正確で効率的なアルゴリズムを見つけてください。線形時間ソリューションがあります。
クイックソートを使ってみたところ、ピボットが3つあれば解けるはずなのですが、クイックソートで重複が出てきたらどうしたらいいのかわかりません。