David Morgan-Marによって設計されたDropsortは、実際にはソートされているが、元の要素の一部のみを含むリストを生成する線形時間「ソートアルゴリズム」の例です。少なくともその前の要素の最大値よりも大きくない要素は、単にリストから削除されて破棄されます。
テストケースの1つを使用するに{1, 2, 5, 4, 3, 7}は{1, 2, 5, 7}、yieldsの入力としてas 4およびasの3両方が、以前に「ソートされた」値より小さいためにドロップされます5。
「ソート」アルゴリズムが必要なわけではありません。それが本物であることを望んでいます。したがって、数値のリストを指定して、DropSortedリストのリストを出力するプログラムを作成してください(完全なソートアルゴリズムであるために、これらのリストをマージする必要がありますが、 2つのソートされたリストのマージは以前に行われ、もう一度行うように依頼することは、2つの質問をすることとほぼ同じです。したがって、この質問は、具体的には完全なDropSortの「分割」ステップです。
ただし、リストの配置と内容は非常に重要です。プログラムの出力は、DropSortの出力と同等であり、その後に破棄された値のDropSortが続き、ソートされたチェーンのリストのみになるまで続きます。繰り返しますが、既存のテストスイートを借用します(さらに2つ追加します)。
Input                  -> Output
{1, 2, 5, 4, 3, 7}     -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12}           -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5}        -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21}       -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10}    -> {{10, 10, 10, 10}, {9}}  //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6}     -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7}     -> {{0, 2, 5, 7}, {4}, {0}}
入力が空でないと仮定できます。
これはcode-golfなので、標準のルールが適用されます!
{3,4,5,3,4,5,3,4,5}、結果{{3,4,5,5,5},{3,4,4},{3}}?
                
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]か?