マージソート
十進BASIC_プログラミング へ戻る
大学生のための数学 へ戻る
2014.02.23


小さい順に並んだ数列A と 小さい順に並んだ数列B があります。
常に、 数列A と 数列B の第1項の大きさを比べることにします。
  もし、 数列Aの第1項 が 数列B の第1項よりも大きければ、 数列B の第1項を削除して、 新しい数列の第1項とし、 もしそうでなければ、 数列A の第1項を削除して、 新しい数列の第1項とします。
  次に、 数列Aの第1項 が 数列B の第1項よりも大きければ、 数列B の第1項を削除して、 新しい数列の第2項とし、 もしそうでなければ、 数列A の第1項を削除して、 新しい数列の第2項とします。
  このようなことを繰り返していき、 どちらかの数列がなくなったら、 残った数列を新たにできた数列のお尻にくっつけます。
  すると、 数列A と 数列B の全ての項を小さい順に並べた数列になります。

  これはマージソートというアルゴリズムです。 十進BASIC にはサンプルとして Mer_SOAT.BAS が付いています。 この中にマージソートをする関数がありますが、 再帰関数になっており高度すぎてマージソートの仕組みを理解するのは困難です。 そこで、次のような低級なマージソートのプログラムを作ってみました。