티스토리 뷰
728x90
반응형
Java로 구현한 합병 정렬입니다. 배열을 반으로 나눠서 오른쪽이 왼쪽의 숫자보다 작으면 이동시키는 것을 반복합니다.
class MergeSort {
void mergesort(int[] array) {
int[] helper = new int[array.length];
mergesort(array, helper, 0, array.length - 1);
}
void mergesort(int[] array, int[] helper, int low, int high) {
if (low < high) {
int middle = (low + high) / 2;
mergesort(array, helper, low, middle);
mergesort(array, helper, middle + 1, high);
merge(array, helper, low, middle, high);
}
}
void merge(int[] array, int[] helper, int low, int middle, int high) {
// low~high 까지 복사
for (int i = low; i <= high; i++) {
helper[i] = array[i];
}
// 왼쪽 절반만 사용
int left = low;
int right = middle + 1;
int current = low;
while (left <= middle && right <= high) {
if (helper[left] <= helper[right]) {
array[current] = helper[left];
left++;
} else {// 오른쪽 값이 왼쪽 값보다 작을 경우
array[current] = helper[right];
right++;
}
current++;
}
// 왼쪽 나머지를 원래자리로 복사
int remaining = middle - left;
for (int i = 0; i <= remaining; i++) {
array[current + i] = helper[left + i];
}
}
public static void main(String[] args) {
new MergeSort().mergesort(new int[]{9, 8, 1, 5, 7, 6});
}
}
반응형
'프로그래밍' 카테고리의 다른 글
C++ 문자열 숫자 변환하기 (0) | 2021.06.28 |
---|---|
Java - Split Array Largest Sum (Hard, LeetCode) (0) | 2021.06.26 |
LeetCode - MinStack (0) | 2021.06.03 |
LeetCode - LRU Cache (0) | 2021.06.03 |
LeetCode - 3Sum (0) | 2021.06.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday