とりあえず実行できるようにしてみました。
コード:
#include <stdio.h>
void appendNode(int);
int h[10]={0,12,23,34,45,56,67,-1,-1,-1};
int n=6;
/* main関数の戻り値intと引数voidを明示する */
int
main(void)
{
int i,x;
for(i=0;i<=2;i++){
/* printfの引数を入れる (空文字列だと警告が出た) */
printf("%s", "");
scanf("%d",&x);
appendNode(x);
}
/* H[1]~H[9]を表示したいので、0からではなく1から始める */
for(i=1;i<=9;i++){
printf("%d",h[i]);
printf("\n");
/* 抜けていた閉じカッコを加える */
}
}
/* 余計なセミコロンを消す */
void appendNode(int num)
{
int i,j,tmp;
i=n+1;
h[i]=num;
j=i/2;
while(j>=1 && h[i]>h[j]){
tmp=h[i];
h[i]=h[j];
h[j]=tmp;
i=j;
j=i/2;
}
n=n+1;
/* 余計な閉じカッコを消す */
}
3回ループというのは、H の後半の未使用要素に入力をそれぞれ読み込みたい、ということだと思います。
何も書かれていないprintfは謎ですね。消していいかもしれません。
そもそも、H[1]~H[9]の9個を表示しているはずなのに、実行結果に6個しか要素が無い、というのもおかしい気がします。
(例えば、未使用要素は表示せず、全て未使用要素を表す -1 を入力として与えるなら辻褄は合うが…)
さらに、提示されたプログラム中の h は親ノードの値が子ノードの値よりも
小さいヒープになっているにもかかわらず、
親ノードの値が子ノードの値よりも
大きいヒープに値を追加する手続きである appendNode を使っているため、結果がおかしくなるかもしれません。
(ちなみに、手書きの文字の H は、11→41→25 という親子関係があるので、ヒープではありません)
ちなみに、通常のヒープソートでは、ソートを行う要素をヒープに入れた後、ヒープから要素を順に取り出すことによるソートを行います。
それに対し、ここで扱っているプログラムには、ヒープから要素を取り出す処理が無いようです。
(それは後々加えるのかな?)
ヒープソート - Wikipedia