>  기사  >  백엔드 개발  >  Python에서 Hill 정렬 알고리즘을 작성하는 방법은 무엇입니까?

Python에서 Hill 정렬 알고리즘을 작성하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-09-19 08:46:50844검색

Python에서 Hill 정렬 알고리즘을 작성하는 방법은 무엇입니까?

Python에서 Hill 정렬 알고리즘을 작성하는 방법은 무엇입니까?

Shell Sort는 특정 간격으로 요소를 비교하여 요소를 이동함으로써 이동 횟수를 줄이는 향상된 삽입 정렬 알고리즘입니다. 힐 정렬의 핵심 아이디어는 정렬할 요소들을 일정한 간격으로 그룹화한 후, 각 그룹별로 삽입 정렬을 수행하고, 간격을 1이 될 때까지 계속해서 줄여 최종적으로 완전한 삽입 정렬을 수행하는 것이다.

아래에서는 Hill 정렬 알고리즘을 Python으로 작성하는 방법을 자세히 소개합니다.

먼저 삽입 정렬을 구현하는 함수를 작성해야 합니다. 삽입 정렬의 핵심 아이디어는 이미 정렬된 이전 시퀀스에 현재 요소를 삽입하는 것입니다.

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

다음으로 정렬할 목록을 매개변수로 받는 Hill 정렬 함수를 작성합니다.

def shell_sort(arr):
    n = len(arr)
    gap = n // 2  # 初始间隔设置为列表长度的一半
    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
        gap = gap // 2  # 缩小间隔

마지막으로 Hill 정렬의 정확성을 확인하는 테스트 함수를 작성합니다.

def test_shell_sort():
    arr = [12, 34, 55, 23, 8, 17, 45, 91]
    shell_sort(arr)
    assert arr == [8, 12, 17, 23, 34, 45, 55, 91]
    print("希尔排序测试通过!")

if __name__ == "__main__":
    test_shell_sort()

테스트 기능을 실행한 후 오류가 보고되지 않고 "Hill sort test pass!"라는 메시지가 출력되면 Hill sort 구현이 올바른 것입니다.

Hill 정렬의 시간 복잡도는 선택한 간격 시퀀스와 관련이 있습니다. 최적의 간격 시퀀스는 아직 발견되지 않았습니다. 힐 정렬의 평균 시간 복잡도는 약 O(n^1.3)이고, 최악의 경우 시간 복잡도는 약 O(n^2)입니다.

힐 정렬은 삽입 정렬에 비해 처음에 삽입 정렬 요소를 부분적으로 정렬할 수 있어 후속 비교 및 ​​이동 작업이 줄어들고 정렬 효율성이 향상되는 효율적인 정렬 알고리즘입니다. 목록을 빠르게 정렬하려면 Hill 정렬 알고리즘을 사용해 보세요.

위 내용은 Python에서 Hill 정렬 알고리즘을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.