#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 65535
struct Heap {
int *data;
int size;
int capacity;
};
typedef struct Heap *MaxHeap;
void fix(MaxHeap mh, int parent);
void swap(int *data, int i, int j) {
int tmp;
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
void Print(MaxHeap mh) {
int i;
for(i=1;i<=mh->size;i++) {
printf("%d ", mh->data[i]);
}
printf("\n");
}
MaxHeap createMaxHeap(int maxsize) {
int n, item, i;
printf("nums: \n");
scanf("%d", &n);
MaxHeap mh = (MaxHeap)malloc(sizeof(struct Heap));
mh->data = (int*)malloc(sizeof(int)*maxsize);
mh->size = n;
mh->capacity = maxsize;
mh->data[0] = MAXSIZE;
printf("please input item: \n");
for(i=1;i<=mh->size;i++) {
scanf("%d", &mh->data[i]);
}
for(i=mh->size/2;i>=1;i--) {
fix(mh, i);
}
return mh;
}
void fix(MaxHeap mh, int parent) {
int child = 2*parent;
while(child<=mh->size) {
if(child<mh->size && (mh->data[child] < mh->data[child+1])) child++;
if(mh->data[child] <= mh->data[parent]) break;
else {
swap(mh->data, child, parent);
parent = child;
child = child*2;
}
}
}
int main() {
MaxHeap mh;
mh = createMaxHeap(20);
Print(mh);
return 0;
}