알고리즘

Merge sort

leeeehhjj 2022. 3. 31. 16:47
public class MergeSort {
    public void mergeSort(int[] arr, int start, int end) {
        if (start < end) {
            int mid = (start+end)/2;
            mergeSort(arr, start, mid);
            mergeSort(arr, mid+1, end);
            merge(arr, start, mid, end);
        }
    }

    public void merge(int[] arr, int start, int mid, int end) {
        int[] temp = new int[arr.length];
        for (int i = start; i <= end; i++) {
            temp[i] = arr[i]; //임시 저장소에 arr 복사
        }
        int part1 = start;
        int part2 = mid + 1;
        int index = start;
        while (part1 <= mid && part2 <= end) {
            arr[index++] = (temp[part1] <= temp[part2]) ? temp[part1++] : temp[part2++];
        }
        for (int i = 0; i <= mid - part1; i++) {//temp의 뒤쪽 배열은 남아도 어차피 arr 뒤쪽과 같으므로 무시
            arr[index+i] = temp[part1 + i];  //앞 배열에 남은 요소 복사
        }
    }
}