• Source
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. // 중복되는거 삭제한다면?
    5. void Merge(int*array,int left, int middle, int right){
    6. int length =(right-left+1);
    7. int* sorted = (int*) malloc(sizeof(int)*(length));
    8. int i=left; int j = middle+1;
    9. int seq=0;
    10. while(i <=middle && j <=right){
    11. // printf("i is %d, j is %d\n",i,j);
    12. // printf("%d %d compared\n",array[i],array[j]);
    13. if(array[i] <= array[j]){
    14. sorted[seq] = array[i];
    15. i++;
    16. } else {
    17. sorted[seq] = array[j];
    18. j++;
    19. }
    20. //printf("sorted[%d] is %d\n",seq,sorted[seq]);
    21. seq++;
    22. }
    23. //printf("present i : %d, j:%d and middle is %d\n",i,j,middle);
    24. //printf("\n");
    25. if(i> middle){
    26. while( j<=right){ sorted[seq] = array[j];
    27. //printf("sorted[%d] is %d\n",seq,sorted[seq]);
    28. j++; seq++; }
    29. }
    30. else {
    31. while(i<= middle ){ sorted[seq] = array[i];
    32. //printf("sorted[%d] is %d\n",seq,sorted[seq]);
    33. i++; seq++; }
    34. }
    35. //printf("result is ");
    36. seq =0;
    37. for(int k =left; k<right+1; k++){
    38. array[k] = sorted[seq]; seq ++;
    39. //printf("%d ",array[k]);
    40. }
    41. //printf("\n");
    42. }
    43. void mergesort(int* array, int left,int right){
    44. if(left < right){
    45. int half = (left + right)/2;
    46. mergesort(array,left,half);
    47. mergesort(array,half+1,right);
    48. //printf("merge begin ");
    49.  
    50. Merge(array,left,half,right);
    51. }
    52. }
    53. int main(void) {
    54. int N;
    55. scanf("%d\n",&N);
    56. int* array = (int*) malloc(sizeof(int)*N);
    57. for(int i =0; i<N; i++){
    58. scanf("%d\n",&array[i]);
    59. }
    60.  
    61. mergesort(array,0,(N-1));
    62. for(int i =0; i<(N) ; i++){ printf("%d\n",array[i]); }
    63. return 0;
    64. }
    65.