Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

정렬되지 않은 두 배열을 병합하여 정렬된 배열 만들기 - Java 완전 가이드

이 글에서는 정렬되지 않은 두 개의 배열을 하나로 병합한 후, 결과 배열을 오름차순으로 정렬하는 방법을 알아봅니다. 자바(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)만에 정렬된 상태로 병합할 수 있으므로 더욱 효율적입니다.