이 글에서는 정렬되지 않은 두 개의 배열을 하나로 병합한 후, 결과 배열을 오름차순으로 정렬하는 방법을 알아봅니다. 자바(Java)에서는 Arrays.sort() 메서드를 활용하면 간단하게 구현할 수 있습니다.
1단계: 정렬되지 않은 두 개의 배열 생성
먼저 병합할 두 개의 정렬되지 않은 배열을 준비합니다.
int[] arr1 = new int[] {50, 22, 15, 40, 65, 75};
int[] arr2 = new int[] {60, 45, 10, 20, 35, 56};2단계: 병합 결과를 담을 새로운 배열 생성
두 배열의 요소를 모두 담을 수 있도록, 두 배열의 길이를 합친 크기의 새로운 결과 배열을 생성합니다.
int count1 = arr1.length; int count2 = arr2.length; int[] resArr = new int[count1 + count2];
3단계: 두 배열을 결과 배열에 병합
while 반복문을 사용해 첫 번째 배열과 두 번째 배열의 모든 요소를 순서대로 결과 배열에 복사합니다.
while (i < arr1.length) {
resArr[k] = arr1[i];
i++;
k++;
}
while (j < arr2.length) {
resArr[k] = arr2[j];
j++;
k++;
}4단계: 병합된 배열 정렬 및 전체 예제 코드
병합이 완료되면 Arrays.sort()를 호출하여 결과 배열을 오름차순으로 정렬합니다. 아래는 지금까지의 과정을 모두 포함한 완성된 예제 코드입니다.
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] arr1 = new int[] {50, 22, 15, 40, 65, 75};
int[] arr2 = new int[] {60, 45, 10, 20, 35, 56};
System.out.println("첫 번째 배열 = " + Arrays.toString(arr1));
System.out.println("두 번째 배열 = " + Arrays.toString(arr2));
int count1 = arr1.length;
int count2 = arr2.length;
int[] resArr = new int[count1 + count2];
int i = 0, j = 0, k = 0;
// 첫 번째 배열 병합
while (i < arr1.length) {
resArr[k] = arr1[i];
i++;
k++;
}
// 두 번째 배열 병합
while (j < arr2.length) {
resArr[k] = arr2[j];
j++;
k++;
}
// 병합된 배열 정렬
Arrays.sort(resArr);
System.out.println("정렬된 병합 배열 = " + Arrays.toString(resArr));
}
}실행 결과
첫 번째 배열 = [50, 22, 15, 40, 65, 75] 두 번째 배열 = [60, 45, 10, 20, 35, 56] 정렬된 병합 배열 = [10, 15, 20, 22, 35, 40, 45, 50, 56, 60, 65, 75]
핵심 정리
이 방식의 시간 복잡도는 병합에 O(n+m), 정렬에 O((n+m)log(n+m))이 소요됩니다. 여기서 n과 m은 각각 두 배열의 길이입니다. 만약 두 배열이 이미 정렬되어 있다면, 투 포인터(two-pointer) 기법을 사용하면 O(n+m)만에 정렬된 상태로 병합할 수 있으므로 더욱 효율적입니다.