찾다
백엔드 개발파이썬 튜토리얼Python에서 Hill 정렬 알고리즘을 구현하는 방법

    알고리즘 설명

    "증분 정렬 감소"라고도 불리는 힐 정렬은 삽입 정렬을 최적화하여 생성된 정렬 알고리즘입니다. 실행 아이디어는 배열의 요소를 아래 첨자 증분으로 그룹화하고, 각 요소 그룹을 삽입 및 정렬하고, 증분을 줄이고, 증분이 1에 도달할 때까지 이전 단계를 반복하는 것입니다.

    일반적으로 Hill 정렬의 시간 복잡도는 증분 크기에 따라 O(n1.3)~O(n2)입니다. Hill 정렬의 공간 복잡도는 O(1)로 불안정한 정렬 알고리즘입니다. Hill 정렬을 수행할 때 요소의 한 번의 이동은 여러 요소에 걸쳐 있을 수 있으며, 이는 여러 이동을 상쇄하고 효율성을 향상시킬 수 있습니다.

    다음은 (배열 길이/2)를 초기 증분으로 사용하는 오름차순 Hill 정렬입니다. 각 정렬 후에 증분은 절반으로 줄어듭니다.

    1단계:

    그림 2-28에 표시된 대로 첫 번째 요소부터 시작하여 4씩 증가하여 그룹화합니다. 증분이 4인 경우 그룹에 요소가 두 개만 있고 그렇지 않으면 요소의 첨자가 배열 범위를 초과한다는 것을 알 수 있습니다.

    Python에서 Hill 정렬 알고리즘을 구현하는 방법

    2단계:

    그림 2-29와 같이 그룹의 요소에 대해 삽입 정렬을 수행합니다.

    Python에서 Hill 정렬 알고리즘을 구현하는 방법

    3단계:

    그림 2-30과 같이 계속해서 동일한 방법으로 그룹화하고, 그룹에 요소를 삽입하고 정렬하여 순서대로 만듭니다.

    Python에서 Hill 정렬 알고리즘을 구현하는 방법

    전체 배열의 모든 숫자를 순회한 후 이 정렬 라운드가 종료됩니다. 증분을 절반으로 줄이고 다음 정렬 라운드를 계속합니다.

    4단계:

    그림 2-31과 같이 증분량이 2가 되면 각 그룹의 요소가 증가하고 전체 그룹 수가 감소하는 것을 알 수 있습니다. 각 그룹을 탐색할 때까지 각 그룹의 요소를 계속해서 삽입 정렬합니다.

    Python에서 Hill 정렬 알고리즘을 구현하는 방법

    5단계:

    그림 2-32에 최종 정렬 단계가 표시됩니다. 이때 증분은 1이 됩니다. 이는 전체 배열의 삽입 정렬과 같습니다. 즉, 마지막 라운드 정렬입니다.

    Python에서 Hill 정렬 알고리즘을 구현하는 방법

    마지막 정렬을 마치고 전체 힐 정렬이 끝났습니다.

    코드 구현

    for 루프에서는 각 그룹의 첫 번째 요소를 삽입하고 정렬할 필요가 없고 해당 첨자가 0에서 step-1 사이이므로 순회는 첨자 단계부터 시작됩니다.

    순서도에서 접근 방식을 시뮬레이션하려면 두 개의 루프를 사용해야 한다는 점에 유의해야 합니다. 첫 번째 그룹을 사용한 다음 동일한 그룹의 요소를 한 번에 주문합니다. 효율성을 높이기 위해 숫자를 탐색할 때마다 해당 숫자가 위치한 그룹을 삽입하고 정렬하는 for 루프를 직접 사용합니다. 이 순회는 삽입 정렬의 순서 요구 사항도 충족합니다. 삽입 정렬에서는 현재 첨자의 값을 변경해야 하므로 for 루프에 영향을 미치지 않도록 현재 첨자를 저장하는 데 변수 ind가 사용됩니다.

    일반 삽입 정렬은 1 증분의 Hill 정렬과 동일합니다. 요소 전체의 Hill 정렬은 실제로 증분만 변경하며 논리적으로 일반 삽입 정렬과 다르지 않습니다.

    Hill 정렬 코드:

    nums = [5,3,6,4,1,2,8,7]
    def ShellSort(nums):
      step = len(nums)//2         #初始化增量为数组长度的一半
      while step > 0:           #增量必须是大于0的整数
       for i in range(step,len(nums)): #遍历需要进行插入排序的数
         ind = i
         while ind >= step and nums[ind] < nums[ind-step]: #对每组进行插入排序
          nums[ind],nums[ind-step] = nums[ind-step],nums[ind]
          ind -= step
       step //= 2           #增量缩小一半
      print(nums)
    ShellSort(nums)

    프로그램을 실행하면 출력 결과는 다음과 같습니다.

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

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

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    Python vs. C : 학습 곡선 및 사용 편의성Python vs. C : 학습 곡선 및 사용 편의성Apr 19, 2025 am 12:20 AM

    Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.

    Python vs. C : 메모리 관리 및 제어Python vs. C : 메모리 관리 및 제어Apr 19, 2025 am 12:17 AM

    Python과 C는 메모리 관리 및 제어에 상당한 차이가 있습니다. 1. Python은 참조 계산 및 쓰레기 수집을 기반으로 자동 메모리 관리를 사용하여 프로그래머의 작업을 단순화합니다. 2.C는 메모리 수동 관리가 필요하므로 더 많은 제어를 제공하지만 복잡성과 오류 위험을 증가시킵니다. 선택할 언어는 프로젝트 요구 사항 및 팀 기술 스택을 기반으로해야합니다.

    과학 컴퓨팅을위한 파이썬 : 상세한 모양과학 컴퓨팅을위한 파이썬 : 상세한 모양Apr 19, 2025 am 12:15 AM

    과학 컴퓨팅에서 Python의 응용 프로그램에는 데이터 분석, 머신 러닝, 수치 시뮬레이션 및 시각화가 포함됩니다. 1.numpy는 효율적인 다차원 배열 및 수학적 함수를 제공합니다. 2. Scipy는 Numpy 기능을 확장하고 최적화 및 선형 대수 도구를 제공합니다. 3. 팬더는 데이터 처리 및 분석에 사용됩니다. 4. matplotlib는 다양한 그래프와 시각적 결과를 생성하는 데 사용됩니다.

    파이썬 및 C : 올바른 도구 찾기파이썬 및 C : 올바른 도구 찾기Apr 19, 2025 am 12:04 AM

    Python 또는 C를 선택할 것인지 프로젝트 요구 사항에 따라 다릅니다. 1) Python은 간결한 구문 및 풍부한 라이브러리로 인해 빠른 개발, 데이터 과학 및 스크립팅에 적합합니다. 2) C는 컴파일 및 수동 메모리 관리로 인해 시스템 프로그래밍 및 게임 개발과 같은 고성능 및 기본 제어가 필요한 시나리오에 적합합니다.

    데이터 과학 및 기계 학습을위한 파이썬데이터 과학 및 기계 학습을위한 파이썬Apr 19, 2025 am 12:02 AM

    Python은 데이터 과학 및 기계 학습에 널리 사용되며 주로 단순성과 강력한 라이브러리 생태계에 의존합니다. 1) 팬더는 데이터 처리 및 분석에 사용되며, 2) Numpy는 효율적인 수치 계산을 제공하며 3) Scikit-Learn은 기계 학습 모델 구성 및 최적화에 사용되며 이러한 라이브러리는 Python을 데이터 과학 및 기계 학습에 이상적인 도구로 만듭니다.

    Python 학습 : 2 시간의 일일 연구가 충분합니까?Python 학습 : 2 시간의 일일 연구가 충분합니까?Apr 18, 2025 am 12:22 AM

    하루에 2 시간 동안 파이썬을 배우는 것으로 충분합니까? 목표와 학습 방법에 따라 다릅니다. 1) 명확한 학습 계획을 개발, 2) 적절한 학습 자원 및 방법을 선택하고 3) 실습 연습 및 검토 및 통합 연습 및 검토 및 통합,이 기간 동안 Python의 기본 지식과 고급 기능을 점차적으로 마스터 할 수 있습니다.

    웹 개발을위한 파이썬 : 주요 응용 프로그램웹 개발을위한 파이썬 : 주요 응용 프로그램Apr 18, 2025 am 12:20 AM

    웹 개발에서 Python의 주요 응용 프로그램에는 Django 및 Flask 프레임 워크 사용, API 개발, 데이터 분석 및 시각화, 머신 러닝 및 AI 및 성능 최적화가 포함됩니다. 1. Django 및 Flask 프레임 워크 : Django는 복잡한 응용 분야의 빠른 개발에 적합하며 플라스크는 소형 또는 고도로 맞춤형 프로젝트에 적합합니다. 2. API 개발 : Flask 또는 DjangorestFramework를 사용하여 RESTFULAPI를 구축하십시오. 3. 데이터 분석 및 시각화 : Python을 사용하여 데이터를 처리하고 웹 인터페이스를 통해 표시합니다. 4. 머신 러닝 및 AI : 파이썬은 지능형 웹 애플리케이션을 구축하는 데 사용됩니다. 5. 성능 최적화 : 비동기 프로그래밍, 캐싱 및 코드를 통해 최적화

    Python vs. C : 성능과 효율성 탐색Python vs. C : 성능과 효율성 탐색Apr 18, 2025 am 12:20 AM

    Python은 개발 효율에서 C보다 낫지 만 C는 실행 성능이 높습니다. 1. Python의 간결한 구문 및 풍부한 라이브러리는 개발 효율성을 향상시킵니다. 2.C의 컴파일 유형 특성 및 하드웨어 제어는 실행 성능을 향상시킵니다. 선택할 때는 프로젝트 요구에 따라 개발 속도 및 실행 효율성을 평가해야합니다.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    Dreamweaver Mac版

    Dreamweaver Mac版

    시각적 웹 개발 도구

    Atom Editor Mac 버전 다운로드

    Atom Editor Mac 버전 다운로드

    가장 인기 있는 오픈 소스 편집기

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    MinGW - Windows용 미니멀리스트 GNU

    MinGW - Windows용 미니멀리스트 GNU

    이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.