|ÆQÁ¤·Ä °³³ä | ÆQÁ¤·Ä ¾Ë°í¸®Áò| ÆQÁ¤·Ä ºÐ¼® |

ÆQ Á¤·Ä ¾Ë°í¸®Áò

 

-------------------------------------------------------------------------------

#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 È£Ãâ*/

        }

-------------------------------------------------------------------------------