병합 정렬이란?
배열의 요솟수가 2개 이상인 경우,
배열을 반으로 나눠 앞부분을 병합 정렬하고 뒷부분을 병합 정렬한 후,
앞부분과 뒷부분을 병합하는 정렬 알고리즘.
여기서 병합이란 단순히 합치는 것이 아니라, 다음과 같이 이미 정렬된 두 배열의 요소 중 더 작은 요소를 선택해 목표 배열에 넣는 것이다.
이미 정렬된 두 배열 병합하기
static void mergeArray(int[] a, int[] b, int[] c) {
//각 배열의 포인터를 모두 0으로 초기화
int pa, pb, pc;
pa=pb=pc=0;
//두 배열의 포인터가 모두 각 배열의 끝에 닿지 못했을 때
while(pa<a.length && pb<b.length) {
//두 배열 중 어느 쪽의 값이 작은지 판별해서 목표 배열에 넣는다.
c[pc++] = (a[pa]>=b[pb]) ? b[pb++] : a[pa++];
}
//B배열의 포인터는 끝에 닿았지만 A배열 포인터는 닿지 못했을 때
while(pa<a.length) {
c[pc++] = a[pa++];
}
//A배열의 포인터는 끝에 닿았지만 B배열 포인터는 닿지 못했을 때
while(pb<b.length) {
c[pc++] = b[pb++];
}
}
자바에서 구현하기
'old > 알고리즘' 카테고리의 다른 글
알고리즘 (2) 알고리즘의 설계와 분석 (0) | 2023.03.19 |
---|---|
알고리즘 (1) 알고리즘의 정의와 중요성 (0) | 2023.03.14 |
셸 정렬 알고리즘 (0) | 2020.11.22 |
재귀 알고리즘 (0) | 2020.11.17 |
BM 검색 알고리즘 (0) | 2020.11.17 |