1) 개요
- 힙 정렬 알고리즘은 BUILD-MAX-HEAP으로 입력 배열 A[1...n](n = A.length]를 최대 힙으로 만들면서 시작한다.
최대 원소가 루트 A[1]에 저장되어 있으므로 이것을 A[n]과 교환하면 정확히 마지막 자리에 넣을 수 있다.
이제 힙에서 (A.heap-size를 줄여서) 노드 n을 "제거"하면 A[1..(n-1)]을 최대 힙으로 만드는 것은 그리 어렵지 않다.
- 루트의 자식들은 최대 힙으로 남아 있지만, 새로운 루트는 최대 힙 특성을 어길 수 있다.
따라서 최대 힙 특성을 다시 지키도록 MAX-HEAPIFY(A,1)을 호출한다.
힙 정렬 알고리즘은 이 과정을 힙 크기가 n-1일때부터 2로 줄어들때까지 반복한다.
HEAPSORT(A)
1 BUILD-MAX-HEAP(A)
2 for i A.length downto 2
exchange A[1] with A[i]
A.heap-size = A.heap-size -1
MAX-HEAPIFY(A, 1)
- 그림 6.4는 최대 힙이 초기에 만들어진 다음 힙 정렬의 동작의 예를 보여준다.
2-5행에 있는 for 루프의 반복은 항상 최대 힙으로 시작한다.
- BUILD-MAX-HEAP이 O(n) 시간 걸리고 MAX-HEAPFIY를 n-1번 실행하는 것이 각각 O(lgn) 시간이 걸리므로
HEAPSORT의 수행시간은 O(nlgn)이다.
'Introduction to Algorithms' 카테고리의 다른 글
[Introduction to Algorithms] 퀵 정렬 - 퀵 정렬의 성능 (0) | 2024.06.23 |
---|---|
[Introduction to Algorithms] 힙 만들기 (0) | 2024.06.23 |
[Introduction to Algorithms] 힙 특성 유지하기 (0) | 2024.06.22 |
[Introduction to Algorithms] 퀵 정렬 (0) | 2024.06.21 |
[Introduction to Algorithms] 위상정렬 (0) | 2024.06.21 |