c++ 코드로 보는 - Merge Sort(병합 정렬)
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");
}
0 개의 댓글