はじめての C
「ソート法 2」
挿入整列法は とても簡単で、新しい要素 - new item - を 挿入するため、はじめに 要素を 右側に 移動させることによって、それぞれの 新しい要素を その位置 - position - に ソートできるように スペースを つくるのです。
例えば、次のような 数の リストが あるとします ▽
1, 2, 3, 4, 6, 7
数字の 5 を このリストに 挿入するのでしたら、はじめに 5 より大きな要素 - elements - を シフトして、空白 - gap - を 1つ セットします ▽
1, 2, 3, 4, , 6, 7
ひとたび シフトが 終われば、新しい要素を 空いている位置へと セットします ▽
1, 2, 3, 4, 5, 6, 7
挿入整列法で、なにか 気をつけるとすれば、それは 1つの要素が セットされたとしても、そこが 最終的な位置に なるとは 限らない、ということです。
次に入る 新しい要素が より小さければ、それより 大きな要素は シフトすることを 求められるからです。
挿入整列法は、元のリストが どう並んでいる - ordering - か 次第のところが あります。 なぜなら、リストも 順次に 始まっているなら、挿入整列法は 高速に なりますが、しかし、もし リストが 逆順だとすると、より 遅くなるからです。
このことは、挿入整列法を 実装するときに、よく 考えておかないと いけない、設計時の判定 - design decision - と なってきます。
もし ソートされる リストが、より逆順に 並んでいる - reverse sorted - のなら、ソートは その最後の要素から 走査を 始めるべきでしょう。
一般的な 解決法 - solution - であれば、リストが たとえ どんな順次で あったとしても、たぶん より 前方向 - forward - に ソートされているだろうとして、挿入整列法の 疑似コード - pseudocode - を つくってみることですね。
(疑似コードは 省略)