> Java > java지도 시간 > 병합 정렬 알고리즘

병합 정렬 알고리즘

Susan Sarandon
풀어 주다: 2025-01-21 22:04:18
원래의
864명이 탐색했습니다.

병합 정렬 알고리즘에 대한 심층적인 이해

Merge Sort Algorithm

병합 정렬 알고리즘의 핵심 아이디어는 분할 정복 방식, 즉 "분할 정복"입니다. 각 하위 배열에 단 하나의 요소(현재 정렬됨)만 포함될 때까지 배열을 더 작은 하위 배열로 재귀적으로 나눕니다. 그런 다음 이러한 하위 배열을 더 큰 정렬된 배열로 병합합니다. 분할 단계가 아닌 병합 단계에서 정렬 프로세스가 발생한다는 점은 주목할 가치가 있습니다.

알고리즘 시연

정렬할 배열이 있다고 가정해 보겠습니다.

Merge Sort Algorithm

배열을 두 개의 왼쪽 및 오른쪽 하위 배열로 나눕니다.

Merge Sort Algorithm

각 하위 배열에 요소가 하나만 있을 때까지 재귀 분할을 계속합니다.

Merge Sort Algorithm

다음으로 이러한 하위 배열을 병합하고 정렬합니다. 왼쪽에는 더 작은 값, 오른쪽에는 더 큰 값이 있습니다.

Merge Sort Algorithm

최종 정렬:

Merge Sort Algorithm

코드 구현(Java)

원본 Java 코드에는 최적화할 수 있는 몇 가지 효율성 문제가 있습니다. 개선된 코드는 다음과 같습니다.

<code class="language-java">import java.util.Arrays;

public static void mergeSort(int[] array) {
    int n = array.length;
    if (n < 2) {
        return;
    }
    int middle = n / 2;
    int[] left = Arrays.copyOfRange(array, 0, middle);
    int[] right = Arrays.copyOfRange(array, middle, n);

    mergeSort(left);
    mergeSort(right);

    int leftIndex = 0;
    int rightIndex = 0;
    int arrayIndex = 0;

    while (leftIndex < left.length || rightIndex < right.length) {
        if (leftIndex < left.length && (rightIndex >= right.length || left[leftIndex] <= right[rightIndex])) {
            array[arrayIndex++] = left[leftIndex++];
        } else {
            array[arrayIndex++] = right[rightIndex++];
        }
    }
}</code>
로그인 후 복사

이 최적화된 코드는 Arrays.copyOfRange() 메소드를 사용하여 배열 요소를 보다 효율적으로 복사하고, 병합 과정에서 루프 조건 및 판단문을 단순화하여 코드의 가독성과 효율성을 향상시킵니다.

이 개선된 설명과 코드가 병합 정렬 알고리즘을 더 잘 이해하는 데 도움이 되기를 바랍니다!

위 내용은 병합 정렬 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿