C_C++/기초_알고리즘_문제

(C/C++) 병합정렬 Merge Sort

고니자니 2022. 11. 19. 09:56
반응형

#병합 #정렬 #머지소트 #C언어 #배열 #Array

 

 

병합정렬(Merge Sort)

이미 정렬되어 있는 2개 이상의 부분 집합들을 크기순으로 한 개로 합치는 것을 말합니다.

 

 

C언어 코드

#include <stdio.h>
#define NA 10
#define NB 5
#define NC (NA+NB)

int main()
{
    int a[NA] = { 11,22,33,44,55,66,77,88,87,88 };
    int b[NB] = { 10,30,35,78,90 };
    int c[NC];
    int i, j, p;

    i = j = p = 0;
    while (i < NA && j < NB) {        // a, b 둘 중 한 개가 먼저 끝날때까지 반복
        if (a[i] <= b[j])
            c[p++] = a[i++];
        else
            c[p++] = b[j++];
    }

    while (i < NA)                // a 나머지가 있으면 끝에 추가
        c[p++] = a[i++];
    while (j < NB)                // b 나머지가 있으면 끝에 추가
        c[p++] = b[j++];

    for (i = 0; i < NC; i++)      // 병합된 배열 출력
        printf("%d ", c[i]);
    printf("\n");

    return 0;
}

 

 

 

 

C++ 코드

#include <iostream>
using namespace std;

int main()
{
    const int NA = 10;
    const int NB = 5;
    const int NC = NA+NB;

    int a[NA] = { 1,22,33,44,55,66,77,88,87,88 };
    int b[NB] = { 11,30,35,78,90 };
    int c[NC];
    int i, j, p;

    i = j = p = 0;
    while (i < NA && j < NB) {      
        if (a[i] <= b[j])
            c[p++] = a[i++];
        else
            c[p++] = b[j++];
    }

    while (i < NA)               
        c[p++] = a[i++];
    while (j < NB)           
        c[p++] = b[j++];

    for (i = 0; i < NC; i++)
        cout << c[i] << " ";
    cout << endl;

    return 0;
}

 

 

반응형