fork(1) download
  1. #include <stdio.h>
  2.  
  3. void merge(int a[], int low, int mid, int hight) //분리된 배열 정렬 및 병합 함수
  4. {
  5. int b[6];
  6. int i = low; //왼쪽 시작
  7. int j = mid + 1; //오른쪽 시작
  8. int k = 0; //배열 b의 인덱스 값
  9.  
  10. while(i <= mid && j <= hight)
  11. {
  12. if(a[i] <= a[j]) //분리된 왼쪽 배열과 오른쪽 배열 비교
  13. b[k++] = a[i++];
  14. else
  15. b[k++] = a[j++];
  16. }
  17. while(i <= mid) //비교하지 않은 왼쪽 배열이 있다면 배열 b에 전부 채우기
  18. b[k++] = a[i++];
  19. while(j <= hight) //비교하지 않은 오른쪽 배열이 있다면 배열 b에 전부 채우기
  20. b[k++] = a[j++];
  21. k--;
  22.  
  23. while(k >= 0) //배열 b 내용을 배열 a 내용에 덮어쓰기
  24. {
  25. a[low + k] = b[k];
  26. k--;
  27. }
  28. }
  29. void mergeSort(int a[], int low, int hight) //배열의 요소를 분할하는 함수
  30. {
  31.  
  32. int mid;
  33. if(low < hight)
  34. {
  35. mid = (low + hight) / 2;
  36. mergeSort(a, low, mid); //왼쪽 배열의 요소 분리
  37. mergeSort(a, mid + 1, hight); //오른쪽 배열의 요소 분리
  38. merge(a, low, mid, hight); //분리된 배열 정렬 및 병합 함수
  39. }
  40. }
  41. int main(void)
  42. {
  43. int arr[6] = { 3, 4, 5, 2, 1, 6 };
  44. int i;
  45.  
  46. mergeSort(arr, 0, 6 - 1); //배열의 요소를 분할하는 함수
  47.  
  48. for(i = 0; i < 6; i++)
  49. printf("%d ", arr[i]);
  50. }
Success #stdin #stdout 0s 4400KB
stdin
Standard input is empty
stdout
1 2 3 4 5 6