HeapSort Algorithm
HeapSort_ PesudoCode
HEAPSORT(A, n)
BUILD-HEAP(A, n)
for i ← n downto 2 do
exchange A[1] ↔ A[i]
HEAPIFY(A, 1, i - 1)
예시를 통해 알아봅시다.
-
다음과 같이 정렬되지 않은 배열 A가 존재합니다.

-
A[1…n] 의 주어진 배열을 BUILD−HEAP(A,n) 함수를 호출하여 max Heap으로 변환합니다.

- 루트노드와 마지막 원소의 값을 교환합니다.

- 마지막노드는 leaf node이므로 정렬됐지만, 마지막 노드를 제외한 root노드를 트리로 하는 배열은 아래와 같이 최대힙의 속성을 위배합니다.

- 나머지 요소들을 정렬하기 위해, 마지막 노드를 제외한 나머지 원소에 대해 Heapify를 진행합니다.

그 다음 i를 1줄인 이후, 다음노드에 대해 아래와 같이 위의 과정을 반복합니다.



이렇게 반복하다보면 최종적으로 아래와 같이 배열의 모든 요소가 크기순서대로 정렬된 것을 확인할 수 있습니다.

HeapSort Run Time Analysis
-
BuildHeap() 함수는 O(n)의 시간복잡도가 걸립니다.
-
Heapify()함수는 n-1번 호출되므로, O(logn)의 시간복잡도가 수행됩니다.
-
따라서, HeapSort()함수의 총 시간복잡도는 다음과 같습니다.
O(n)+(n−1)O(lgn)
=O(n)+O(nlgn)
=O(nlgn)
Time Complexity Comparsion
