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]; //앞 배열에 남은 요소 복사
}
}
}