ヒープ並べ替え(最小ヒープ)

1046 ワード

最小ヒープを利用して数字を並べ替えて、第一行為の数字の個数、第二行為の具体的な数字.14 99 36 7 22 17 46 12 2 19 25 28 1 92
コード:
皬include int h[101]int n;
//交換関数void swap(intx,int y){int t;t=h[x];h[x]=h[y];h[y]=t;
//下方調整関数void siftdown(in t i){int t、flags=0;/iが息子を持っている場合、flags=0を実行すると、サイクルwhile(#2==n&flagge==0){/比較iノードの値とその左息子の値if(h[i]){i 2]){t=i*2;.
	//  i      
	if (i*2+1<=n)
	{
		//  i           
		if (h[t]>h[i*2+1])
		{
			t=i*2+1;
		}
	}

	//       ,              
	if (t!=i)
	{
		swap(t,i);
		i=t;
	}
	else flag=1;
}
)
//最小ヒープの関数void creat(){int i;for(i=n/2;i>=1;i–){siftdown(i)}
//削除最大のノードint deletemax(){int t]//tは、ルートノードの値(すなわち番号1の値)t=h[1]、//最後のノードの値で、ルートの値h[1]=h[n]、/最後のリーフノードn–を一時的に保存するために使用されます.
int main(){int i,num;//読込ノード数scanf("%d"、&num)//////読込ノード数scanf("%d"、&h[i];;)
n=num;

//                 (   :                )
creat();

//    ,    
for (i=1;i<=num;i++)
{
	printf("%d ",deletemax());
}

return 0;
)
試験結果:1 2 5 7 12 17、22、28、36、46、92、99