質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

1回答

207閲覧

マージソートのアルゴリズム

m.g2017

総合スコア19

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2017/09/04 14:25

『プログラミングの宝箱 アルゴリズムとデータ構造 第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] + " "); } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/09/04 15:53

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

コードを追うよりまずはイメージを掴んでください。
マージソート
動画 マージソート(YouTube)

投稿2017/09/04 15:19

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問