#include<stdio.h>
#include<stdlib.h>
void build_max_heap_up(int A[], int n);
int main(void) {
int i;
int A[5] = {1,2,4,5,3 };
build_max_heap_up(A, 3);
for (i = 0; i < 5; i++) {
printf("%d ", *(A+i));
}
}
void build_max_heap_up(int A[], int n) {
int i = (n - 2) / 2; //부모
int left = 2 * i + 1; //자식왼쪽노드
int right = 2 * i + 2; //자식오른쪽노드
int tmp;
if (A[left] && A[right]) { //자식 왼쪽과 오른쪽이 있다면
if (A[left] > A[i]) { //왼쪽노드가 부모보다 크면 변경
tmp = A[i];
A[i] = A[left];
A[left] = tmp;
}
if (A[right] > A[i]) { //오른쪽노드가 부모보다 크면 변경
tmp = A[i];
A[i] = A[right];
A[right] = tmp;
}
}
else { //왼쪽노드는 무조건있다고 가정 오른쪽노드가 없다면
if (A[left] > A[i]) {
tmp = A[i];
A[i] = A[left];
A[left] = tmp;
}
}
if (A[n]) { //A[n](다음 왼쪽자식노드)이 존재한다면
build_max_heap_up(A, n+2); //다음 build하러감
}
}
제가 힙정렬을 살짝 응용하여서 코딩을 했는데 여기에서 main함수안에 있는 int A[5]={1,2,4,5,3};부분이 A[6]으로 바뀌면 Debug Error가 안뜨는지 이유를 모르겠습니다. 그리고 A[5]로 Debug Error를 못뜨게 하는 방법이 있는지 궁금합니다. 그리고 A배열의크기=sizeof(A)/sizeof(int)이것을 build_max_heap_up에 매개변수에 들어가지 않고 A배열의 크기를 넣는 방법이 있는지 궁금합니다ㅜㅜ....