#include <stdio.h>
#include <stdlib.h>
// 중복되는거 삭제한다면?
void Merge(int*array,int left, int middle, int right){
int length =(right-left+1);
int* sorted
= (int*) malloc(sizeof(int)*(length
)); int i=left; int j = middle+1;
int seq=0;
while(i <=middle && j <=right){
// printf("i is %d, j is %d\n",i,j);
// printf("%d %d compared\n",array[i],array[j]);
if(array[i] <= array[j]){
sorted[seq] = array[i];
i++;
} else {
sorted[seq] = array[j];
j++;
}
//printf("sorted[%d] is %d\n",seq,sorted[seq]);
seq++;
}
//printf("present i : %d, j:%d and middle is %d\n",i,j,middle);
//printf("\n");
if(i> middle){
while( j<=right){ sorted[seq] = array[j];
//printf("sorted[%d] is %d\n",seq,sorted[seq]);
j++; seq++; }
}
else {
while(i<= middle ){ sorted[seq] = array[i];
//printf("sorted[%d] is %d\n",seq,sorted[seq]);
i++; seq++; }
}
//printf("result is ");
seq =0;
for(int k =left; k<right+1; k++){
array[k] = sorted[seq]; seq ++;
//printf("%d ",array[k]);
}
//printf("\n");
}
void mergesort(int* array, int left,int right){
if(left < right){
int half = (left + right)/2;
mergesort(array,left,half);
mergesort(array,half+1,right);
//printf("merge begin ");
Merge(array,left,half,right);
}
}
int main(void) {
int N;
int* array
= (int*) malloc(sizeof(int)*N
); for(int i =0; i<N; i++){
}
mergesort(array,0,(N-1));
for(int i
=0; i
<(N
) ; i
++){ printf("%d\n",array
[i
]); } return 0;
}