Pseudo Code
Coddy의 힙 정렬 - DSA 시리즈 코스 레슨 — 9개 중 4번째.
siftDown(array, i, size):
loop:
largest = i
left = 2*i + 1
right = 2*i + 2
if left < size and array[left] > array[largest]: largest = left
if right < size and array[right] > array[largest]: largest = right
if largest == i: stop
swap array[i] and array[largest]
i = largest
heapSort(array):
n = length(array)
for i from n/2 - 1 down to 0: # 최대 힙(max-heap) 구축
siftDown(array, i, n)
for end from n-1 down to 1: # 최대값을 반복적으로 추출
swap array[0] and array[end]
siftDown(array, 0, end)- siftDown은 최대 힙(max-heap) 속성이 복구될 때까지 너무 작은 부모 노드를 더 큰 자식 노드 아래로 밀어냅니다.
size는 배열에서 여전히 힙의 일부인 크기를 나타냅니다. - 빌드 단계: 모든 리프 노드가 아닌 노드(마지막 부모인 인덱스
n/2 - 1부터 루트까지)를 sift down 하면 어떤 배열이든 최대 힙으로 변환됩니다. - 정렬 단계: 각 단계에서 현재 최댓값을 끝으로 이동시키고 힙의 크기를 줄여서, 배열이 뒤에서부터 정렬된 상태로 채워지게 합니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
힙 정렬 - DSA 시리즈의 모든 레슨
2The Algorithm
How it works?Pseudo CodeImplementation (Part 1)Implementation (Part 2)