『プログラミングの宝箱 アルゴリズムとデータ構造 第2版』(SBクリエイティブ株式会社)の内容の
第1章、マージソートのjava版サンプルの以下の処理内容がわかりません。
文法的にわからない箇所はありません。
mainメソッドからmergeSort(int n, int[] x, int offset) を呼び出した後、
すべてのブロックが1になる(if (n <= 1) return;にぶちあたるまで)ところまではわかりました。その後のmergeSort(int n, int[] x, int offset) の処理内容がよくわかりません。
理解できる方がいましたら回答をお願いできないでしょうか。
import java.util.Random;
class List1_5 {
// データの件数
private static final int N = 10;
private static int[] sort = new int[N];
private static void mergeSort(int n, int[] x, int offset) { if (n <= 1) return; int m = n / 2; // ブロックを前半と後半に分ける mergeSort(m, x, offset); mergeSort(n - m, x, offset + m); int[] buffer = new int[m]; // 併合(マージ)操作 for (int i = 0; i < m; ++i) { buffer[i] = x[offset + i]; } int j = m; int i = 0; int k = 0; while (i < m && j < n) { if (buffer[i] <= x[offset + j]) { x[offset + k++] = buffer[i++]; } else { x[offset + k++] = x[offset + j++]; } } while (i < m) { x[offset + k++] = buffer[i++]; } } public static void main(String args[]) { Random random = new Random(); System.out.println("ソート準備"); for (int i = 0; i < N; ++i) { sort[i] = random.nextInt(1000); System.out.print(sort[i] + " "); } System.out.println("\nソート開始"); mergeSort(N, sort, 0); System.out.println("ソート終了"); for (int i = 0; i < N; ++i) { System.out.print(sort[i] + " "); } }
}
質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。