c++ 코드로 보는 - Merge Sort(병합 정렬)

by - 오전 10:33

Merge Sort c++ 코드

코드 위주의 포스트 입니다. 자료구조에 대한 로직 설명은 다른 좋은 블로그 글을 보시면 좋을 것 같습니다^^

#include <stdio.h>

#define MAX_N 10

int arr[MAX_N] = { 9,6,5,8,4,2,3,1,7,0 };
int sorted_arr[MAX_N];

void merge(int left, int mid, int right) {
        int i, j, k;
        // i : left 에서 mid 까지 arr에서 움직이는 index
        // j : mid+1 에서 right 까지 arr에서 움직이는 index
        // k : sorted_arr에서 left부터 right까지 움직이는 index

        i = left;
        j = mid + 1;
        k = left;

        //arr의 왼쪽 절반, 오른쪽 절반을 비교하며 sorted_arr에 채워 넣는다
        while (i <= mid && j <= right) {
                //arr[i] < arr[j] 이면 오름차순   arr[i] > arr[j] 이면 내림차순
                if (arr[i] < arr[j]) 
                        sorted_arr[k++] = arr[i++];
                else
                        sorted_arr[k++] = arr[j++];
        }

        //남아있는 arr의 값을 모두 sorted_arr에 넣는다
        while (i <= mid) {
                sorted_arr[k++] = arr[i++];
        }
        while (j <= right){
                sorted_arr[k++] = arr[j++];
        }
        //sorted_arr의 값을 arr에 복사해준다
        for (int l = left; l <= right; l++) {
                arr[l] = sorted_arr[l];
        }
        int a = 0;
}

void merge_sort(int left, int right) {
        int mid;

        //left가 right보다 작으면 분할
        if (left < right) {
                mid = (left + right) / 2;

                merge_sort(left, mid);
                merge_sort(mid + 1, right);

                merge(left, mid, right);
        }
}




int main() {

        //input : arr = { 9,6,5,8,4,2,3,1,7,0 }
        for (int i = 0; i < MAX_N; i++) printf("%d ", arr[i]);
        printf("\n");
        
        merge_sort(0, MAX_N - 1);
        
        //ouput : arr = { 0,1,2,3,4,5,6,7,8,9 }
        for (int i = 0 ; i < MAX_N ; i++) printf("%d ", arr[i]);
        printf("\n");

}

You May Also Like

0 개의 댓글

featured posts