Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で学ぶ再帰的挿入ソートのプログラムと実装方法

挿入ソート(Insertion Sort)は、その場(インプレース)で比較を行うソートアルゴリズムの一つです。

このアルゴリズムは、各要素を「その要素より前の部分配列(すでにソート済みのサブ配列)」の中の正しい位置へ順次挿入していくことで、配列全体を整列させます。

アルゴリズムの手順

ステップ1:1からn-1までループを回し、以下の処理を行います。

ステップ2.1:位置iにある要素 array[i] を選択します。

ステップ2.2:その要素を、ソート済みサブ配列 array[0]〜arr[i] の中の適切な位置に挿入します。

具体例で理解しよう

配列 = [34, 7, 12, 90, 51]

i = 1 のとき: arr[1] = 7 を、サブ配列 arr[0]〜arr[1] 内の正しい位置に挿入します。

[7, 34, 12, 90, 51]

i = 2 のとき: arr[2] = 12 を、サブ配列 arr[0]〜arr[2] 内の正しい位置に挿入します。

[7, 12, 34, 90, 51]

i = 3 のとき: arr[3] = 90 はすでに正しい位置にあるため、配列は変化しません。

[7, 12, 34, 90, 51]

i = 4 のとき: arr[4] = 51 を、サブ配列 arr[0]〜arr[4] 内の正しい位置に挿入します。

[7, 12, 34, 51, 90]

再帰的挿入ソートの考え方

ここでは、再帰を使った挿入ソートの動作を見ていきましょう。通常のループ版とは逆のアプローチを取ります。つまり、まず recursiveInsertionSort() 関数を再帰的に呼び出して「n-1個の要素」を先にソートし、その返されたソート済み配列に対して、n番目の要素を適切な位置に挿入するという流れです。

再帰的挿入ソートのサンプルプログラム

コード例

#include <stdio.h>
void recursiveInsertionSort(int arr[], int n){
    if (n <= 1)
        return;
    recursiveInsertionSort( arr, n-1 );
    int nth = arr[n-1];
    int j = n-2;
    while (j >= 0 && arr[j] > nth){
        arr[j+1] = arr[j];
        j--;
    }
    arr[j+1] = nth;
}
int main(){
    int array[] = {34, 7, 12, 90, 51};
    int n = sizeof(array)/sizeof(array[0]);
    printf("Unsorted Array:\t");
    for (int i=0; i < n; i++)
        printf("%d ",array[i]);
    recursiveInsertionSort(array, n);
    printf("\nSorted Array:\t");
    for (int i=0; i < n; i++)
        printf("%d ",array[i]);
    return 0;
}

実行結果

Unsorted Array: 34 7 12 90 51
Sorted Array: 7 12 34 51 90

まとめ

再帰的挿入ソートは、「小さな問題から順に解いていく」という再帰の特性を活かした実装です。計算量は平均・最悪ケースともにO(n²)であり、要素数が少ないデータや、ほぼ整列済みのデータに対しては効率的に動作します。再帰呼び出しの構造を理解する良い教材としてもおすすめです。

  1. Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説

    この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。挿入ソートのアルゴリズム挿入ソートは以下の手順で動作します。入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。具体的には、ソート

  2. Pythonで学ぶ挿入ソート(Insertion Sort)の仕組みと実装方法

    この記事では、Python 3.xにおける挿入ソート(Insertion Sort)の基本的な考え方と、実際のコードによる実装方法をわかりやすく解説します。 挿入ソートのアルゴリズム 挿入ソートは、配列を「整列済みの部分」と「未整列の部分」に分け、未整列の要素を一つずつ取り出して、整列済み部分の正しい位置に挿入していくシンプルなソート手法です。処理の手順は以下の通りです。 1. 各反復ごとに整列済みの配列を少しずつ拡大しながら、入力要素を走査する。 2. 現在の要素(キー)を、整列済み配列内の最大値と比較する。 3. キーがその最大値より大きければ、要素はそのままの位置に置かれ、 次の要