重複の可能性:
O(N) 回の移動のみで安定したインプレース バイナリ パーティションを実行できるアルゴリズムはどれですか?
これは私が打たれたインタビューの質問の 1 つです。
質問: 正と負の両方の整数の配列が与えられ、正の数を一方の側にシフトし、負の数を反対側にシフトする必要があります。元。{-1,5,3,-8,4,-6,9} から {-1,-8,-6,5,3,4,9}。これは O(n) で、追加の array なしで行う必要があります。
最初に、次のようなクイックソートを介してこれを行うことで考えました
疑似コード
ゼロに最も近い要素を見つけます。それをピボット要素にします。次に、配列にクイックソートの 1 つのパスを適用します。これは O(n) です。
ああ!しかし、クイックソートは安定したソートではありませんか?
その後、次の解決策がありました
擬似コード:
最初に、最初の +ve 番号まで current を増加させ、最後の -ve 番号まで減少させます。
current が負の場合、 current をインクリメントします current が正の場合、 end の要素と交換し、 current をデクリメントして両方とも end current >= end の場合、ブレークします。
まだ正しい答えを得ていません。これに関する提案が必要