Menu
Coddy logo textTech

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 하면 어떤 배열이든 최대 힙으로 변환됩니다.
  • 정렬 단계: 각 단계에서 현재 최댓값을 끝으로 이동시키고 힙의 크기를 줄여서, 배열이 뒤에서부터 정렬된 상태로 채워지게 합니다.

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

힙 정렬 - DSA 시리즈의 모든 레슨