이진 힙 (Binary Heap)
힙 조건(각 노드의 우선순위가 자식 노드의 우선 수위보다 높음)을 만족하는 완전 이진트리
최대 힙(Maximum Heap) : 가장 큰 값을 루트에 저장
최소 힙(minimum Heap) : 가장 작은 값을 루트에 저장
힙에서 부모와 자식 관계
A[i]의 왼쪽 자식 = A[2i]
A[i]의 오른쪽 자식 = A[2i+1]
A[i]의 부모 = A[i/2] (i가 홀수면 i/2에서 정수 부분만)
힙 정렬 (Heap Sort)
정렬할 입력으로 최대 힙을 만들어 가장 큰 수가 저장되어 있는 루트와 힙의 가장 마지막 노드를 교환(가장 큰 수를 배열의 맨 뒤로 옮김)
힙 크기를 1개 줄인 후 위배된 힙 조건을 해결하여 다시 힙 정렬 수행
루트 90과 힙의 마지막 노드 40을 바꾼 후, 힙 크기를 1개 줄임
위배된 힙 조건 해결(루트를 자식들 중 자기보다 큰 값을 가진 자식(둘 다 자기보다 크면 제일 숫자가 큰 자식과 교환)과 계속 교환하며 힙 조건을 만족할 때까지 아래쪽으로 내려감)
위배된 힙 조건 해결 완료
다시 루트 80과 힙의 마지막 노드 20을 바꾼 후, 힙 크기를 1개 줄이고 힙 위배 조건을 해결하며 힙에 하나의 숫자만 남을 때까지 힙 정렬 반복
'파이썬 알고리즘 > 정렬 알고리즘' 카테고리의 다른 글
기수 정렬 (Radix Sort) (0) | 2023.06.06 |
---|---|
쉘 정렬 (0) | 2023.05.26 |