26.1.6.29 併合整列の書き方

プログラム"SortM"の動き方を見るために,中間結果を見るための仕掛けを追加してみましょう.そのために,支援ツールAlibに,配列の一部だけを表示する新しいメソッド"showpart"を追加します.

static void showpart(int a[ ], int p, int q){
  int i;
  for(i=0; i<p; i=i+1) System.out.print("    ");
  System.out.print(" "+a[p]+" ");
  for(i=p+1; i<=q; i=i+1) System.out.print(" "+a[i]+" ");
  for(i=q+1; i< a.length; i=i+1) System.out.print("    ");
}

このメソッドではすべての要素値が2桁であることを前提として,

添字値が p 未満,あるいは q より大きい場合には4個の空白を

添字値が p 以上 q 以下の場合には要素値の前後に空白をつけて添字値の順に表示します.

次に,メソッド"sortm"の実行本体の先頭で

System.out.print("given ");
Alib.showpart(a, top, tail); Alib.ln();

を,末尾で

System.out.print(" --> ");
Alib.showpart(a, top, tail); Alib.ln();

を入れておくと,処理の進行を見ることができます.実例を示します.まず前半の前半の…前半から処理され,順次後半の処理へ移ってゆく様子がよくわかりますね.

60 31 57 79 55 64 92 20 95 98 given 60 31 57 79 55 64 92 20 95 98 given 60 31 57 79 55 given 60 31 57 given 60 31 --> 31 60 given 57 --> 57 --> 31 57 60 given 79 55 --> 55 79 --> 31 55 57 60 79 given 64 92 20 95 98 given 64 92 20 given 64 92 --> 64 92 given 20 --> 20 --> 20 64 92 given 95 98 --> 95 98 --> 20 64 92 95 98 --> 20 31 55 57 60 64 79 92 95 98 20 31 55 57 60 64 79 92 95 98