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

C言語で2つの配列をマージ(結合)する方法をわかりやすく解説

C言語では、2つの配列を入力として受け取り、それらをマージ(結合)して結果を3つ目の配列に格納することができます。本記事では、ソート済みの2つの配列を1つに統合する方法を、サンプルコードと実行結果とともに解説します。

配列をマージする基本ロジック

2つの配列をマージする際の基本的な考え方は、両方の配列を先頭から順に比較し、小さい方の要素を結果用の配列に格納していくというものです。これにより、マージ後の配列も自動的に昇順にソートされた状態になります。

マージ処理のロジックは以下の通りです。

j=0, k=0
for(i=0;i<o;i++) { // 2つの配列をマージ
    if(a[j]<=b[k]){
        c[i]=a[j];
        j++;
    } else {
        c[i]=b[k];
        k++;
    }
}

ここで、j は配列aのインデックス、k は配列bのインデックス、o はマージ後の配列cのサイズ(配列aと配列bのサイズの合計)を表します。

C言語でのマージプログラム例

以下は、C言語で2つの配列をマージする方法を示す完全なプログラムです。まず各配列のサイズと要素をユーザーから入力し、それぞれの配列をバブルソートで昇順に並べ替えた後、マージ処理を行います。

#include<stdio.h>
#include<stdlib.h>
int main(){
    int a[10],b[10],c[20],m,n,o,i,j,k,temp;
    printf("Enter size of Array1\n");
    scanf("%d",&n);
    printf("Enter size of Array2\n");
    scanf("%d",&m);
    o=m+n; // 3つ目の配列のサイズ
    printf("Enter Elements of Array1\n");
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    printf("Enter Elements of Array2\n");
    for(i=0;i<m;i++){
        scanf("%d",&b[i]);
    }
    // 1つ目の配列をソート
    for(i=0;i<n;i++){
        for(j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    // 2つ目の配列をソート
    for(i=0;i<m;i++){
        for(j=0;j<m-1-i;j++){
            if(b[j]>b[j+1]){
                temp=b[j];
                b[j]=b[j+1];
                b[j+1]=temp;
            }
        }
    }
    printf("Elements of Array1\n");
    for(i=0;i<n;i++){
        printf("a[%d]=%d\n",i,a[i]);
    }
    printf("Elements of Array2\n");
    for(i=0;i<m;i++){
        printf("b[%d]=%d\n",i,b[i]);
    }
    j=0;
    k=0;
    for(i=0;i<o;i++){ // 2つの配列をマージ
        if(a[j]<=b[k]){
            c[i]=a[j];
            j++;
        }
        else{
            c[i]=b[k];
            k++;
        }
    }
    printf("Merged array is :\n");
    for(i=0;i<o;i++){
        printf("c[%d]=%d\n",i,c[i]);
    }
}

プログラムの処理の流れ

このプログラムは以下のステップで動作します。

1. 配列1と配列2のサイズを入力として受け取ります。
2. 各配列の要素をユーザーから入力します。
3. バブルソートを用いて、両方の配列をそれぞれ昇順にソートします。
4. ソート済みの配列の先頭要素同士を比較し、小さい方から順に配列cへ格納します。
5. 最後に、マージされた配列cの全要素を表示します。

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Enter Elements of Array1
1
2
3
4
Enter Elements of Array2
6
8
3
Elements of Array1
a[0]=1
a[1]=2
a[2]=3
a[3]=4
Elements of Array2
b[0]=3
b[1]=6
b[2]=8
Merged array is:
c[0]=1
c[1]=2
c[2]=3
c[3]=3
c[4]=4
c[5]=6
c[6]=8

このように、入力された2つの配列の要素が昇順に並べ替えられ、1つの配列として正しくマージされていることが確認できます。重複した値(この例では「3」)もそのまま保持される点に注意してください。

まとめ

C言語で配列をマージするには、事前に両方の配列をソートしておくことが重要です。ソート済みの配列同士を先頭から順に比較しながら新しい配列へ格納していくことで、効率的にマージ処理を行えます。この手法は、マージソートのアルゴリズムの基礎にもなるため、しっかりと理解しておきましょう。

  1. Wordでメールマージを行う方法|Excelの連絡先リストを使って一括送信する手順

    メールマージ機能を使えば、差し込みフィールド(プレースホルダー)を活用して、大量のメールや手紙に宛名や個別情報を自動挿入できます。必要なのは連絡先データベースと、メールまたはレターのテンプレートだけです。 この記事では、Microsoft WordでExcelのデータベースを使ったメールマージを作成する方法を詳しく解説します。手順はMicrosoft WordおよびExcel 2016から引用していますが、他のバージョンでも基本的な流れは同じです。 Excelからメールマージを実行するには メールマージは、データベース内のデータを取り込み、それぞれの差し込みフィールドに配置することで、大量メー

  2. Windows 11に言語を追加する方法|表示言語の変更手順をわかりやすく解説

    Windows 11への言語追加について Microsoftの発表によると、Windows 11はWindows 10ユーザー向けに無料アップグレードとして提供されました。これにより、Windows 11のハードウェア要件を満たしているPCであれば、誰でも無料で最新バージョンへ移行できます。新しいWindowsには、ゲームやアプリの実行など、PCでの作業をより快適にする数多くの新機能が搭載されています。 たとえば、Windows 11ではユーザーインターフェースが完全に刷新され、タスクバー中央に配置された新しいスタートボタンと、デザインが一新されたスタートメニューが大きな特徴となっています。ま