**Avoid FP math for an integer problem**
`floor(log2(max_heap->size))` is overkill and at some level risks incorrect results with less than ideal FP functions. A simply loop will suffice.
assert(max_heap->size <= 0);
log2 = -1;
size = max_heap->size;
while (size > 0) {
size >>= 1;
log2++;
}
return log2;
Certainly a fast hack exists.
**Name space**
Rather than names all over the place like
...
void increase_key()
int* build_max_heap()
void insert()
...
Move your "13 operations" into a nearby namespace.
...
void mh_increase_key()
int* mh_build_max_heap()
void mh_insert()
mh_...()
...