문제2037--[정렬]힙정렬(py)

2037: [정렬]힙정렬(py)

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

힙 정렬(heap sort)는  최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법이다. 
이 정렬의 알고리즘은 다음과 같다.
  1. n개의 노드에 대한 완전 이진 트리를 구성한다. 이때 루트 노드부터 부모노드, 왼쪽 자식노드, 오른쪽 자식노드 순으로 구성한다.
  2. 최대 힙을 구성한다. 최대 힙이란 부모노드가 자식노드보다 큰 트리를 말하는데, 단말 노드를 자식노드로 가진 부모노드부터 구성하며 아래부터 루트까지 올라오며 순차적으로 만들어 갈 수 있다.
  3. 가장 큰 수(루트에 위치)를 가장 작은 수와 교환한다.
  4. 2와 3을 반복한다.
힙정렬은 힙을 재구성하기 위한 과정인 heapify() 함수와 이를 통해 힙 정렬을 수행하는 heapsort() 함수로 이루어져 있다.

입력되는 자료를 오름차순으로 정렬하기 위해 다음과 같이 코드를 작성하였을 때 heapify() 코드를 작성하여 제출하시오.


def heapSort(arr):
  n = len(arr)
  for i in range(n//2, -1, -1):
    heapify(arr,n,i)
  for i in range(n-1,0,-1):
    arr[i], arr[0] = arr[0], arr[i]
    heapify(arr, i, 0)

arr=list(map(int, input().split()))
heapSort(arr)
print(*arr)




입력 설명

함수의 매개변수로 다음과 같은 정보가 입력된다.
arr : 정렬 데이터가 저장된 배열
n : 힙 구조를 만들 배열의 크기
i : 힙 구성을 위해 조정할 노드의 인덱스

출력 설명

전달받은 arr의 배열의 값을 변경하며, 별도의 반환값은 없다.

입력 예시 Copy

1 12 9 5 6 10

출력 예시 Copy

1 5 6 9 10 12 

게시판

출처/분류