¨çÁ¤·ÄÇÑ ³»¿ëÀÌ Cutoffº¸´Ù Å©¸é Qsort ·Î 

   À۰ųª °°À¸¸é Insertionsort·Î Á¤·Ä

¨è¼¼ ¼öÀÇ ÁßÀ§¼ö °è»ê, Pivot¿¡ Áß¾Ó°ª ³Ö±â

¨ë¹è¿­ÀÇ ¿ÞÂÊ¿¡¼­ºÎÅÍ Áß¾Ó°ªº¸´Ù Å« ¿ø¼Ò±îÁö

   À̵¿ 

¨ì¹è¿­ÀÇ ¿À¸¥ÂÊ¿¡¼­ºÎÅÍ ¿ø¼ÒÀÇ °ªÀÌ Áß¾Ó°ªº¸´Ù

   ÀÛÀº ¿ø¼Ò±îÁö À̵¿

¨í¨î¨ïÁ¤·ÄÀÌ ³¡³ªÁö ¾Ê¾ÒÀ¸¸é Áß¾Ó°ªº¸´Ù ÀÛÀº

   ¿ø¼Ò´Â ¿ÞÂÊ¿¡, Å« ¿ø¼Ò´Â ¿À¸¥ÂÊ¿¡ µé¾î°¡µµ·Ï

   ±³Ã¼ÇÔ. Á¤·ÄÀÌ ³¡³µÀ¸¸é ¹«ÇÑ·çÇÁ¸¦ ¹þ¾î³²

¨ðÁß¾Ó°ªº¸´Ù Å« ù ¹øÂ° ¿ä¼Ò¿Í Áß¾Ó°ªÀ» ±³È¯ÇØ

   Áß¾Ó°ªÀ» ÀÛÀº °ª°ú Å« °ª »çÀÌ¿¡ ³¢¿ö ³ÖÀ½.

   ÁßÀ§Ä¡ Á¤·Ä

¨ñ¿ÞÂʺκи®½ºÆ®(Áß¾Ó°ªº¸´Ù ÀÛÀººÎºÐ)ÀÇ ÄüÁ¤·Ä

¨ò¿À¸¥Âʺκи®½ºÆ®(Áß¾Ó°ªº¸´Ù Å«ºÎºÐ)ÀÇ ÄüÁ¤·Ä

¨ó¿ø¼Ò°¡ Cutoffº¸´Ù À۰ųª °°Àº ¼­ºêÆ®¸®ÀÇ

   »ðÀÔÁ¤·Ä

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

Äü Á¤·Ä ¾Ë°í¸®Áò


 

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

void Quicksort(int A[], int N) {Qsort(A,0, N-1); }      /* Äü Á¤·Ä È£Ãâ ÇÔ¼ö */

 

int Median3(int A[], int Left, int Right)                       /* ¼¼ ¼öÀÇ ÁßÀ§¼ö °è»ê ÇÔ¼ö */

{      int Center= (Left + Right) / 2;              /* A[Left]<= A[Center]<= A[Right]*/

        lf( A[Left] > A[Center] ) Swap( &A[Left], &A[Center] );

        if( A[Left] > A[Right] )  Swap( &A[Left], &A[Right] );

        if( A[Center] > A[Right]) Swap(&A[Center], &A[Right]);

        swap( &A[Center], &A[Right-1] );   /* ÇǺ¿µÈ ¼ö¸¦ ¿À¸¥ÂÊ-1ÀÇ À§Ä¡¿¡ ÀÖ´Â ¼ö¿Í SWAP */

        return A[Right-1];                            /*return ÇǺ¿ */

}

 

#define Cutoff(3)                                                     /* Äü Á¤·Ä ÇÔ¼ö */

void Qsort( int A[], int Left, int Right )       /* ¹è¿­ AÀÇ ¿ÞÂÊ ³¡ ÷ÀÚ:Left, ¿À¸¥ÂÊ ³¡ ÷ÀÚ:Right */

         {     int i, j, Pivot;                             

/*1*/       if( Left + Cutoff <= Right )           

/*2*/       {     Pivot = Median3( A, Left, Right);  

/*3*/              i=Left; j=Right-1;

/*4*/              for( ; ; )

/*5*/             {    while( A[++i ] < Pivot ){}

/*6*/                   while( A[--j ] > Pivot ){}

/*7*/                   if( i < j )

/*8*/                        swap( &A[ i ], &A[ j ] );

/*9*/                   else   break;

                      }

/*10*/            swap( &A[ i ], &A[ Right-1] );

/*11*/            Qsort( A, Left, i-1 );

/*12*/            Qsort( A, i+1, Right );   

                }

                else                           

/*13*/           InsertionSort( A+Left , Right-Left+1)        

           }

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