#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;
}
posted @ 2019-12-26 18:07  狐耳  阅读(181)  评论(0编辑  收藏  举报