Algorithm/06. 정렬

6-8. 힙 정렬(Heap Sort)

찹키리 2021. 5. 5. 12:58

힙이란?

  • 힙(heap)을 사용해 정렬하는 알고리즘
  • 힙은 '부모의 값이 자식보다 항상 크다'는 조건을 만족하는 완전이진트리
  • 부모의 값이 자식보다 항상 작아도 힙이라고 함(부모와 자식 요소의 관계만 일정하면 됨)

 

 

 

완전이진트리 → 힙

 

 

  • 힙은 루트가 가장 큰(혹은 작은) 값이어야 함
  • 즉, 모든 부모와 자식의 관계는 항상 부모의 값 >= 자식의 값이 성립되어야 함
  • 힙에서 부모와 자식 관계는 일정하지만 형제 사이의 대소 관계는 일정하지 않음

 

 

 

힙의 요소를 배열에 저장

 

 

 

부모와 자식의 인덱스 사이에는 다음과 같은 관계 성립

1. 부모는 a[(i - 1) / 2]
2. 왼쪽 자식은 a[i * 2 + 1]
3. 오른쪽 자식은 a[i * 2 + 2]

 

 

 

 

 

힙 정렬

  • '가장 큰 값이 루트에 위치'하는 특징을 이용하는 정렬 알고리즘
  • 힙에서 가장 큰 값인 루트를 꺼내는 작업을 반복하고 그 값을 늘어놓으면 배열의 정렬 종료
  • 힙 정렬은 선택 정렬을 응용한 알고리즘이며 힙에서 가장 큰 값인 루트를 꺼내고 남은 요소에서 다시 가장 큰 값을 구해야 함

 

 

 

 

 

[실습 코드]

 

 

 

'Algorithm > 06. 정렬' 카테고리의 다른 글

6-9. 도수 정렬(Counting Sort)  (0) 2021.06.25
6-7. 병합 정렬(Merge Sort)  (0) 2021.05.03
6-6. 퀵 정렬(Quick Sort)  (0) 2021.03.11
6-5. 셸 정렬(Shell Sort)  (0) 2021.02.28
6-4. 단순 삽입 정렬(Straight Insertion Sort)  (0) 2021.02.28