힙
- 기본 배열로 구성
- 편의를 위해 인덱스를 1부터 시작
- 기본 완전 이진 트리 형태를 사용
- 최대힙을 기준으로 설명
삽입
- 가장 마지막 인덱스 n + 1에 삽입
- n + 1의 부모와 계속 비교해나가며, 값이 크면 (부모의 값이 작으면) 교환한다.
void insert(){
maxHeap[++heapSize] = x;
for (int i = heapSize; i > 1; i /= 2){
if (maxHeap[i / 2] < maxHeap[i]){
swap(i/2, i);
}
else{
break;
}
}
}
삭제
int deleteMaxHeap(){
if (heapSize == 0){
return 0;
}
int root = maxHeap[1];
maxHeap[1] = maxHeap[heapSize];
for (int i = 1; i * 2 <= heapSize;){
if (maxHeap[i] > maxHeap[i * 2] && maxHeap[i] > maxHEap[i * 2 + 1]){
break;
}
else if (maxHeap[i] < maxHeap[i * 2]){
swap(i, i * 2);
i = i * 2;
}
else if (maxHeap[i] < maxHeap[i * 2 + 1]){
swap(i, i * 2 + 1);
i = i * 2 + 1;
}
}
}
참고, 출처
이거 완전 힙하네요