マージソートのヒント

マージソートのプログラムは大きく分けると分割とマージをする関数に分けられる。

分割を行う関数はテキストのサンプルプログラムを参考にすればよい。さらに、マージはテキストのフローチャートをそのままプログラムにすれば実現できる。

ここで問題なのは、分割の関数の再帰呼び出しとマージ関数の順番である。テキストのサンプルの必要なところを書き換えて分割の関数にしたとする。そのとき、関数中の再帰呼び出しを行う部分に

div(前半);
div(後半);
merge(・・・);

とマージを行う関数を付け加えると、分割とマージは以下の図のように行われる。図中の数字は実行される順番を表わし、色は実行される関数を表わす。(クリックすると拡大)