Python을 사용하여 병합 정렬을 구현하는 방법

WBOY
풀어 주다: 2023-06-11 08:46:32
원래의
1740명이 탐색했습니다.

병합 정렬은 고전적인 정렬 알고리즘의 핵심 아이디어는 정렬할 배열을 여러 하위 배열로 나누고, 이러한 하위 배열을 정렬한 다음, 마지막으로 정렬된 하위 배열을 순서 있는 배열로 병합하는 것입니다. 병합 정렬은 시간 복잡도가 O(nlogn)인 비교적 효율적인 정렬 알고리즘입니다.

이 글에서는 Python에서 병합 정렬을 구현하는 방법을 설명하겠습니다.

  1. 병합 정렬 구현 아이디어

병합 정렬 구현 아이디어는 분할 정복과 병합이라는 두 부분으로 구성됩니다. 구체적인 구현 단계는 다음과 같습니다.

1) 정렬할 배열을 연속적으로 2개로 나누고, 왼쪽과 오른쪽 부분을 재귀적으로 정렬합니다.

2) 정렬된 왼쪽 부분과 오른쪽 부분을 순서 있는 배열로 병합합니다.

  1. Python을 사용하여 분할 정복 구현

분할 정복은 병합 정렬의 핵심 아이디어로 분할 정복 부분을 먼저 구현해야 합니다.

코드는 다음과 같습니다.

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left_arr = merge_sort(arr[:mid])
    right_arr = merge_sort(arr[mid:])
    return merge(left_arr, right_arr)
로그인 후 복사

이 함수에서는 먼저 배열 길이가 1보다 작거나 같은지 확인한 다음 배열을 직접 반환합니다. 그렇지 않으면 배열을 두 개로 나누고 각각 왼쪽과 오른쪽 부분을 재귀적으로 정렬한 다음 마지막으로 정렬된 왼쪽 부분과 오른쪽 부분을 병합해야 합니다.

2.1 합병 구현

분할과 정복을 바탕으로 병합 부분을 구현해야 합니다.

코드는 다음과 같습니다:

def merge(left_arr, right_arr):
    i, j = 0, 0
    result = []
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] < right_arr[j]:
            result.append(left_arr[i])
            i += 1
        else:
            result.append(right_arr[j])
            j += 1
    result += left_arr[i:]
    result += right_arr[j:]
    return result
로그인 후 복사

이 함수에서는 먼저 왼쪽과 오른쪽 부분에서 각각 비교할 요소를 가리키는 포인터 i와 j를 초기화합니다. 그런 다음 왼쪽과 오른쪽 요소를 지속적으로 비교하고 더 작은 요소를 결과 목록에 추가한 다음 포인터를 오른쪽으로 이동합니다. 마지막으로 남은 모든 요소를 ​​결과 목록에 추가하여 정렬된 배열로 끝납니다.

  1. 전체 코드

분할 정복 및 병합 부분을 결합한 전체 코드는 다음과 같습니다.

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left_arr = merge_sort(arr[:mid])
    right_arr = merge_sort(arr[mid:])
    return merge(left_arr, right_arr)

def merge(left_arr, right_arr):
    i, j = 0, 0
    result = []
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] < right_arr[j]:
            result.append(left_arr[i])
            i += 1
        else:
            result.append(right_arr[j])
            j += 1
    result += left_arr[i:]
    result += right_arr[j:]
    return result
로그인 후 복사
  1. Testing

병합 정렬 코드가 올바른지 확인하려면 테스트를 수행해야 합니다. .

코드는 다음과 같습니다.

arr = [5, 3, 8, 6, 4, 7, 2, 1]
print(merge_sort(arr))
로그인 후 복사

출력 결과는 다음과 같습니다.

[1, 2, 3, 4, 5, 6, 7, 8]

테스트 결과에 따르면 병합 정렬 코드가 올바른 것으로 나타났습니다.

위 내용은 Python을 사용하여 병합 정렬을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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