#include<stdio.h>
#define maxSize 128
typedef struct{
    int data[maxSize];
    int n;
}maxHeap;
void intHeap(maxHeap &H){
    int i,j;
    printf("请输入数据个数:");
    scanf("%d",&j);
    printf("请输入数据:");
    for(i=0;i<j;i++)
        scanf("%d",&H.data[i]);
    H.n=j;
}
void siftDown(maxHeap &H,int start,int m){
    int i=start;
    int j=2*i+1;
    int tmp=H.data[i];
    while(j<=m){
        if(j<m&&H.data[j]<H.data[j+1])
            j++;
        if(tmp>=H.data[j])
            break;
        else{
            H.data[i]=H.data[j];
            i=j;
            j=2*j+1;
        }
    }
    H.data[i]=tmp;
} 
void HeapSort(maxHeap &H){
    int i;
    for(i=(H.n-2)/2;i>=0;i--)
        siftDown(H,i,H.n-1);
    for(i=H.n-1;i>0;i--){
        int tmp=H.data[0];
        H.data[0]=H.data[i];
        H.data[i]=tmp;
        siftDown(H,0,i-1);
    }
}
void  putHeap(maxHeap H){
    int i;
    for(i=0;i<H.n;i++)
        printf("%d\t",H.data[i]);
}
int main(){
    maxHeap H;
    intHeap(H);
    HeapSort(H);
    putHeap(H);
}

 

#include<stdio.h>
#include<stdlib.h>
#define leafNumber 20
#define totalNumber 39
#define maxValue 32767
typedef struct{
    char data;
    int weight;
    int p,l,r;
}HTNode;
typedef struct{
    HTNode elem[totalNumber];
    int nun,root;
}HFTree;
void createHFTree(HFTree &HT,char value[],int fr[],int n){
    int i,k,s1,s2;
    int min1,min2;
    for(i=0;i<n;i++){
        HT.elem[i].data=value[i];
        HT.elem[i].weight=fr[i];
    }
    for(i=0;i<leafNumber;i++)
        HT.elem[i].p=HT.elem[i].l=HT.elem[i].r=-1;
    for(i=n;i<2*n-1;i++){
        min1=min2=0;
        s1=s2=0;
        for(k=0;k<i;k++)
            if(HT.elem[k].p==-1){
                min2=min1;
                s2=s1;
                min1=HT.elem[k].weight;
                s1=k;
            }
            else if(HT.elem[k].weight<min2){
                min2=HT.elem[k].weight;
                s2=k;
            }
    HT.elem[s1].p=HT.elem[s2].p=i;
    HT.elem[i].l=s1;
    HT.elem[i].r=s2;
    }
    HT.nun=n;
    HT.root=2*n-2;
}
int main(){
    char value[]={'A','B','D','V','E','F'};
    int fr[]={'3','6','4','9','2'};
    int n=5;
    int i;
    HFTree HT;
    createHFTree(HT,value,fr,n);
    for(i=0;i<5;i++)
        printf("%3c",HT.elem[i].data);
}