#include<stdio.h>int index = 8;
int sorted[30];
voidmerge(int data[], int begin, int middle, int end){
int i, j, k, t;
i = begin; // 첫번째 부분집합(시작위치) i=0
j = middle + 1; // 두번째 부분집합 시작위치 j=4
k = begin; // sorted배열에 배열 병합 while (i <= middle && j <= end) {
if (data[i] <= data[j]) {
sorted[k] = data[i];
i++;
}
else {
sorted[k] = data[j];
j++;
}
k++;
}
if (i > middle) {
for (t = j; t <= end; t++) {
sorted[k++] = data[t];
}
}
else {
for (t = i; t <= middle; t++) {
sorted[k++] = data[t];
}
}
for (t = begin; t <= end; t++) {
data[t] = sorted[t];
}
printf("\n병합된 배열 : ");
for (t = 0; t < index; t++) {
printf("%3d", data[t]);
}
}
voidmergeSort(int data[], int begin, int end){
int middle;
if (begin < end) {
middle = (begin + end) / 2; // middle=3mergeSort(data, begin, middle); // 앞부분에 대한 분할 작업 수행 0,1,2,3mergeSort(data, middle + 1, end); // 뒷부분에 대한 분할 작업 수행 4,5,6,7merge(data, begin, middle, end); // 부분집합의 정렬과 병합 작업 수행 begin=0,middle=3,end=7
}
}
intmain(){
int data[8] = { 60,20,15,1,3,90,45,70 };
printf("\n 정렬할 원소 >>");
for (int i = 0; i < index; i++) {
printf("%3d", data[i]);
}
printf("\n\n<<<<<<<< 병합 정렬 수행 >>>>>>>>\n");
mergeSort(data, 0, index - 1);
}