#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(" "); } MaxHeap createMaxHeap(int maxsize) { int n, item, i; printf("nums: "); 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: "); 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; }