#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int sorted[SIZE];
void merge(int list[], int left, int mid, int right){
int i, j, k, l;
i = left;
j = mid+1;
k = left;
/* 분할 정렬된 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 mergeSort(int* arr, int start, int end)
{
int mid = (start+end)/2;
if (start >= end)
return ;
mergeSort(arr, start, mid);
mergeSort(arr, mid+1, end);
merge(arr, start, mid, end);
}
int main()
{
//int size;
int *arr;
//scanf("%d", &size);
arr = (int *)malloc(sizeof(int)*SIZE);
for (int i=0; i<SIZE; i++){
scanf("%d", &arr[i]);
}
mergeSort(arr, 0, SIZE-1);
for (int i=0; i<SIZE; i++){
printf("%d ", arr[i]);
}
return 0;
}