1 #include<stdio.h> 2 #define MAXN 1002 3 int H[MAXN],N,M,r[MAXN]; 4 void inserth(int data); 5 void read(); 6 void printr(); 7 int main(){ 8 read(); 9 printr(); 10 return 0; 11 } 12 13 void inserth(int data){ 14 H[0]++; 15 H[H[0]] = data; 16 if(H[0]==1) return; 17 //根结点 18 else{ //非根结点 19 int i; 20 for(i=H[0];i>1;i=i/2){ 21 if(data < H[i/2]) H[i] = H[i/2]; 22 else break; 23 } 24 H[i] = data; 25 } 26 } 27 void read(){ 28 H[0] = 0; 29 scanf("%d %d",&N,&M); 30 int i,data; 31 for(i=1;i<=N;i++){ 32 scanf("%d",&data); 33 inserth(data); 34 } 35 return; 36 } 37 void printr(){ 38 int i,data,j; 39 for(i=0;i<M;i++){ 40 scanf("%d",&r[i]); 41 } 42 for(i=0;i<M;i++){ 43 if(r[i] <= H[0]){ 44 data = r[i]; 45 for(j=data;j>=1;j=j/2){ 46 printf("%d",H[j]); 47 if(j!=1) printf(" "); 48 } 49 printf("\n"); 50 } 51 } 52 }
总结:在完成的过程中,向小根堆中插入值后,进行调整出现了问题。
原文:https://www.cnblogs.com/Learn-Excel/p/12631024.html