-------------------------------------------------------------------------------
#define LeftChild(i) (2*(i))
void PercDown (int A[
], int i, int N) /*
BuildHeap
¼öÇà*/
{
int
Child, Temp; /*Temp´Â
·çÆ®ÀÇ °ªÀ» º¸°ü */
/*1*/
for(Tmp=A[i]; LeftChild(i)<=N;
i=Child)
{
/*2*/
Child=LeftChild(i);
/*3*/
if(Child!=N
&& A[Child+1] > A[Child])
/*4*/
Child++;
/*5*/
if(
Temp<A[Child]) /* ·çÇÁ¸¦
µ¹¸é¼ ·çÆ®ÀÇ °ªÀÌ */
/*6*/
A[i]=A[Child];
/*
ÀÚ±âÀÇ À§Ä¡·Î ³»·Á¿È */
else
/*7*/
break;
}
/*8*/
A[i]=Temp;
}
void Heapsort(int A[ ],int
N)
{
int
i;
/*a*/
for(
i = N/2; i > 0; i--) /*
BuildHeap
È£Ãâ*/
/*b*/
PercDown(A,
i, N);
/*c*/
for(
i = N; i >= 2; i--)
{
/*d*/
Swap(&A[1],
&A[i]); /*
DeleteMax
·çÆ®ÀÇ °ªÀ» Á¦ÀÏ µÚ·Î */
/*e*/
PercDown(A,
1, i-1); /*
Á¦ÀÏ µÚ¿¡ ÀÖ´ø °ªÀÌ ·çÆ®¿¡¼ ÀÚ±â À§Ä¡·Î
*/
}
/*
BuildHeap
È£Ãâ*/
}
-------------------------------------------------------------------------------
|