コース: プログラミングの基礎:アルゴリズム

今すぐコースを受講しましょう

今すぐ登録して、24,900件以上登録されている、業界エキスパート指導のコースを受講しましょう。

マージソートのコードを理解する

マージソートのコードを理解する

マージソートは再帰的に 分割と合併を繰り返しながら ソートを行うので、 コードが少々複雑になります。 頑張って理解しましょう。 これは C 言語で記述した マージソートのコードです。 配列の宣言の仕方など 違いはありますが、 他の C 言語ベースの プログラミング言語でも 同じように記述できます。 ここでは要素数8の配列 x を マージソート関数に渡して 昇順に並び替える様子を説明します。 マージソートで整列する際には、 作業用領域が必要です。 作業用領域を動的に 確保することもできますが、 説明を簡単にするために 配列 x と 作業用の配列 w は グローバルに宣言していることにします。 マージソートでは最初に 要素がひとつになるまで 分割の処理を行います。 引数 left に0、 right に7を設定して、 マージソート関数を呼ぶので、 配列 x の全範囲が対象になります。 マージソートが呼び出されると、 if の条件は真で、 left、right、center は 図の状態になります。 これは、このマージソート関数を 引数0と3を設定して 再帰的に呼び出し、 配列を左半分に分割することを 意味します。 再帰的に呼び出されたマージソートでは、 if の条件は真で left、right、center は 図の状態になります。 これは、このマージソート関数を 引数0と1を設定して 再帰的に呼び出し、 配列をさらに左半分に分割することを 意味します。 再帰的に呼び出されたマージソートでは、 if の条件は真で left、right、center は 図の状態になります。 これは、このマージソート関数を 引数0と0を設定して 再帰的に呼び出し、 配列をさらに左半分に分割することを 意味します。 つまりこれで、 配列要素は ひとつにまで分割されたことになります。 再帰的に呼び出されたマージソートでは、 if の条件は偽なので、 すぐに return します。 次に center +1 と right を引数に マージソートを呼びます。 これは、図のように 右半分に分割することになります。 再帰的に呼び出されたマージソートでは、 if の条件は偽なので、 すぐに return します。 戻った時の left、right、center は 図の状態です。 ここで for…

目次