#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); }