#define MAX_SIZE 8
int sorted[MAX_SIZE]; // 여분의 배열
// 2개의 인접한 배열 합병
void merge(int list[], int left, int mid, int right) {
int i, j, k, l;
i = left; // i: 정렬된 왼쪽 리스트에 대한 인덱스
j = mid + 1; // j: 정렬된 오른쪽 리스트에 대한 인덱스
k = left; // k: 정렬될 리스트에 대한 인덱스
/* 분할 정렬된 list의 합병 */
while (i <= mid && j <= right) {
if (list[i] <= list[j])
sorted[k++] = list[i++];
else
sorted[k++] = list[j++];
}
// 남아 있는 값들을 일괄 복사
if (i > mid) {
for (l = j; l <= right; l++)
sorted[k++] = list[l];
}
// 남아 있는 값들을 일괄 복사
else {
for (l = i; l <= mid; l++)
sorted[k++] = list[l];
}
// 배열 sorted[](임시 배열)의 리스트를 배열 list[]로 재복사
for (l = left; l <= right; l++) {
list[l] = sorted[l];
}
}
void merge_sort(int list[], int left, int right) {
int mid;
if (left < right) {
mid = (left + right) / 2; // 리스트 균등 분할
merge_sort(list, left, mid); // 앞쪽 부분 리스트 정렬
merge_sort(list, mid + 1, right); // 뒤쪽 부분 리스트 정렬
merge(list, left, mid, right); // 합병
}
}