| 1 | import java.util.Arrays; |
| 2 | |
| 3 | public class MergeSort { |
| 4 | |
| 5 | static void merge(int[] arr, int start, int mid, int end) { |
| 6 | int i = start; // 왼쪽 배열의 시작 |
| 7 | int j = mid + 1; // 오른쪽 배열의 시작 |
| 8 | int k = 0; // 병합된 배열의 시작 |
| 9 | |
| 10 | int[] temp = new int[end - start + 1]; |
| 11 | System.out.println("size : " + (end - start + 1)); |
| 12 | while (i <= mid && j <= end) { |
| 13 | if (arr[i] < arr[j]) { |
| 14 | temp[k++] = arr[i++]; |
| 15 | } else { |
| 16 | temp[k++] = arr[j++]; |
| 17 | } |
| 18 | } |
| 19 | // 남은 값 복사 |
| 20 | if (i > mid) { // 왼쪽 배열 값 다 사용함 , 오른쪽 다 복사 |
| 21 | for (int idx = j; idx <= end; idx++, k++) { |
| 22 | temp[k] = arr[idx]; |
| 23 | } |
| 24 | } else { // 오른쪽 배열 값 다 사용함, 왼쪽 다 복사 |
| 25 | for (int idx = i; idx <= mid; idx++, k++) { |
| 26 | temp[k] = arr[idx]; |
| 27 | } |
| 28 | } |
| 29 | System.out.println(Arrays.toString(temp)); |
| 30 | |
| 31 | // 임시 배열 -> 원래 배열 |
| 32 | for (int num : temp) { |
| 33 | arr[start++] = num; |
| 34 | } |
| 35 | |
| 36 | } |
| 37 | |
| 38 | static void mergeSort(int[] arr, int start, int end) { |
| 39 | if (start < end) { |
| 40 | int mid = (start + end) / 2; |
| 41 | mergeSort(arr, start, mid); |
| 42 | mergeSort(arr, mid + 1, end); |
| 43 | merge(arr, start, mid, end); |
| 44 | } |
| 45 | |
| 46 | } |
| 47 | |
| 48 | public static void main(String[] args) { |
| 49 | int[] arr = { 8, 7, 6, 5, 4, 3, 2, 1 }; |
| 50 | mergeSort(arr, 0, 7); |
| 51 | } |
| 52 | } |
nothing calls this directly
no outgoing calls
no test coverage detected