質問: buffer[i++]; } } ``` このコード中の `Mergesort(n-m, x+m)`の部分が何をしているのかよくわかりません。また、その後のコードについても何をしているのかよくわかりません。 よろしくお願いいたします
回答: まず、「マージソート」がどんなソートだったか考えてみましょう。 * 前半をソートする * 後半をソートする * 前半と後半をマージする まず、`MergeSort(m, x);`で`x[0]`~`x[m-1]`までの分をソートします。そして、`MergeSort(n - m, x + m);`で残りの`n - m`個をソートしています。なお、「配列 + 整数」は**ポインタ演算**で、結果は「`x[m]`以降を指すもの」になります。 半分ずつのソートが済めば、あとはマージをするわけですが、後半に入ったままだとマージをやりづらいので、いったん後半を`buffer`にコピーして、それからマージを行っています。