프로그래밍/코딩테스트
[정렬] 병합 정렬(merge sort)
코드몬스터
2023. 8. 2. 00:10
728x90
참고 영상 사이트는 여기 입니다.
👉 특징
👉 코드
전체 어떤 느낌인지는 알겠지만, 코드적으로 확 와닿지는 않는다!!
public class Test {
private static void mergeSort(int[] arr) {
int[] tmp = new int[arr.length];
mergeSort(arr, tmp, 0, arr.length - 1);
}
private static void mergeSort(int[] arr, int[] tmp, int start, int mid, int end) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(arr, tmp, start, mid);
mergeSort(arr, tmp, mid + 1, mid);
merge(arr, tmp, start, mid, end);
}
}
private static void merge(int[] arr, int[] tmp, int start, int mid, int end) {
for (int i = start; i <= end; i++) {
tmp[i] = arr[i];
}
int part1 = start;
int part2 = mid + 1;
int index = start;
while (part1 <= mid && part2 <= end) {
if (tmp[part1] <= tmp[part2]) {
arr[index] = tmp[part1];
part1++;
} else {
arr[index] = tmp[part2];
part2++;
}
}
for (int i = 0; i <= mid - part1; i++) {
arr[index + i] = tmp[part1 + i];
}
}
public static void main (String[] args) {
int[] arr = {3, 9, 4, 7, 5, 0, 1, 6, 8, 2};
mergeSort(arr);
}
}