(4) Äü Á¤·Ä¹ý(Quick Sorting)

 Äü Á¤·ÄÀÇ ±âº» µ¿ÀÛÀº Á¤·ÄÇϰíÀÚ ÇÏ´Â ¸®½ºÆ®¿¡¼­ ÇÏÀDZâÁØÀÌ µÇ´Â  Å°¸¦ ¼±Á¤ÇÏ¿© ±âÁØÅ°¸¦
Àû´çÇÑ À§Ä¡·Î À̵¿ÇÏ´Â °ÍÀÌ´Ù. À̶§ ¸®½ºÆ®¿¡¼­ ±âÁØÅ°¸¦ °æ°è·Î  ±âÁØÅ°º¸´Ù ¾Õ¿¡ Àִ ŰµéÀº
¸ðµÎ ±âÁØÅ°º¸´Ù À۰ųª °°À¸¸ç ±âÁØÅ°º¸´Ù µÚ¿¡  Àִ ŰµéÀº ¸ðµÎ ±âÁØÅ°º¸´Ù Å©°Å³ª  °°°Ô ¸¸
µç´Ù. ´ÙÀ½°ú °°Àº ۵é·Î ±¸¼ºµÈ ¸®½ºÆ®¸¦ »ý°¢ÇØ º¸ÀÚ.

 ¸®½ºÆ®ÀÇ Ã¹ ¿ø¼Ò¸¦ ±âÁØÅ°·Î ¼±Á¤ÇÑ ÈÄ ´ÙÀ½°ú °°Àº µ¿ÀÛÀ» ¼öÇàÇÑ´Ù. ±âÁØÅ° ¹Ù·Î ´ÙÀ½ÀÇ À§Ä¡
ºÎÅÍ µÚÂÊÀ¸·Î ±âÁØÅ°º¸´Ù Å« ۸¦ ãÀ¸¸ç, µ¿½Ã¿¡ ¸®½ºÆ®ÀÇ ¸¶Áö¸· ŰºÎÅÍ ¾ÕÂÊÀ¸·Î ÁöÁØÅ°º¸´Ù
ÀÛÀº ۸¦ ã¾Æ ¼­·Î ±³È¯ÇÑ´Ù. À§ÀÇ ¿¹¿¡¼­ ±âÁØÅ°´Â 17·Î Àâ°Ô µÇ¸ç, ±âÁØÅ°º¸´Ù Å« Ű´Â 26ÀÌ
µÇ°í ±âÁØÅ°º¸´Ù ÀÛÀº Ű´Â 2°¡ µÇ¾î ¼­·Î ±³È¯À» ÇÏ¸é ´ÙÀ½°ú °°Àº ¸®½ºÆ®°¡ µÈ´Ù.

 °è¼ÓÇØ¼­ ´ÙÀ½ ŰºÎÅÍ ÀÌ·¯ÇÑ µ¿ÀÛÀ» ¹Ýº¹ÇÏ¸é ±âÁØÅ° 17º¸´Ù Å« Ű´Â 24°¡ µÇ°í  ÀÛÀº Ű´Â 8ÀÌ
µÇ¾î ¼­·Î ±³È¯ÇÏ¸é ´ÙÀ½°ú °°Àº ¸®½ºÆ®°¡ µÈ´Ù.


       
 ÀÌ·¯ÇÑ µ¿ÀÛÀ» °è¼ÓÇÏ¸é ±âÁØÅ° 17º¸´Ù Å« Ű´Â 24°¡ µÇ°í  ÀÛÀº Ű´Â 6ÀÌ µÇ´Â À§Ä¡¸¦ ã°Ô µÈ
´Ù. ±×·¯³ª À̹ø¿¡´Â ¾Æ·¡ÀÇ ¸®½ºÆ®¿Í °°ÀÌ ¾ÕÂÊ¿¡¼­ºÎÅÍ Å« ۸¦ ãÀº À§Ä¡¿Í  µÚÂÊ¿¡¼­ºÎÅÍ ÀÛ
Àº ۸¦ ãÀº À§Ä¡°¡ ¼­·Î ±³Â÷ÇßÀ½À» ¾Ë ¼ö ÀÖ´Ù.



 ÀÌ °æ¿ì, µÎ ۰ªÀ» ±³È¯ÇÏÁö ¾ÊÀ¸¸ç ±×´ë½Å ±âÁØÅ°¿Í ÀÛÀº ۸¦ ¼­·Î ±³È¯ÇÏ¿© ´ÙÀ½°ú °°Àº ¸®½º
Æ®¸¦ ¸¸µç´Ù.



 À§ÀÇ ¸®½ºÆ®¿¡¼­ ÁöÁØÅ° 17À» °æ°è·Î ¾ÕÂÊ  Å°µéÀº ¸ðµÎ ±âÁØÅ°º¸´Ù ÀÛÀ¸¸ç µÚÂÊ Å°µéÀº  ¸ðµÎ
17º¸´Ù Å« °ÍÀ» ¾Ë ¼ö ÀÕ´Ù. µû¶ó¼­ ±âÁØÅ° 17Àº Àüü ¸®½ºÆ®°¡ Á¤·ÄÀÌ µÈ ÈÄ¿¡µµ À§Ä¡ º¯µ¿ÀÌ ¾ø
°Ô µÈ´Ù. À§¿¡¼­ ¼³¸íµÈ ±âº» µ¿ÀÛÀº ±âÁØÅ°¸¦ Á¦ À§Ä¡¿¡ ³õÀº ÈÄ ¿ø·¡ÀÇ ¸®½ºÆ®¸¦  ¾ÕÂÊ Å°µé·Î
±¸¼ºµÈ ¸®½ºÆ®¿Í µÚÂÊ Å°µé·Î ±¸¼ºµÈ ¸®½ºÆ®·Î ¾çºÐÇϹǷΠÀ̸¦ ºÐÇÒ(Partition)À̶ó ºÎ¸¥´Ù. ¸Õ
Àú Àüü ¸®½ºÆ®¸¦ ºÐÇÒÇÏ¿© 2°³ÀÇ ¸®½ºÆ®·Î ¸¸µé°í ºÐÇÒµÈ 2°³ÀÇ ¸®½ºÆ®¿¡ °¢°¢ ´Ù½Ã ºÐÇÒÀ» Àû
¿ëÇÑ´Ù. ÀÌ·¯ÇÑ ¹Ýº¹µÈ ºÐÇÒÀ» Àû¿ëÇÒ ¶§ ÆíÀÇ»ó ¿ÞÂÊ ¸®½ºÆ®¸¦ ¸ÕÀú ºÐÇÒÇÑ´Ù. ¾Õ¿¡¼­  »ç¿ëµÈ
¿¹¿¡ ´ëÇÏ¿© ºÐÇÒÀ» ¹Ýº¹ ¼öÇàÇÏ¿© Àüü ¸®½ºÆ®ÀÇ Á¤·ÄÀ» ¿Ï·ÎÇÏ´Â Äü Á¤·Ä¹ýÀÇ ¿¹´Â ±×¸² 6¿¡ ÁÖ
¾îÁø´Ù. ±×¸² 6¿¡¼­ m°ú nÀº ºÐÇÒÀ» ¼öÇàÇÒ ¸®½ºÆ®ÀÇ ¹üÀ§¸¦ ³ªÅ¸³½´Ù.



 ÀϹÝÀûÀ¸·Î ±âÁØÅ°´Â Ç×»ó ºÐÇÒÇϰíÀÚ ÇÏ´Â ¸®½ºÆ®ÀÇ Ã¹ ¹øÂ° Ű·Î ¼±Á¤µÇ´Âµ¥ ÀÌ·¯ÇÑ ¼±Á¤ ¹æ¹ý
À» »ç¿ëÇÏ¿© Äü Á¤·ÄÀ» C ÇÁ·Î±×·¥À¸·Î ÀÛ¼ºÇϸé ÇÁ·Î±×·¥ 7-4¿Í °°´Ù. ±×·¯³ª ¸®½ºÆ®ÀÇ ´Ù¸¥
۸¦ ±âÁØÅ°·Î ¼±Á¤ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ·Á¸é ¼±Á¤µÈ Ű¿Í ¸®½ºÆ®ÀÇ Ã¹ ¹øÂ° ۸¦ ¸ÕÀú ±³È¯  
ÈÄ ¸®½ºÆ® 9¸¦ ÀÌ¿ëÇÏ¸é °¡´ÉÇÏ´Ù.

(¸®½ºÆ® 9) Äü Á¤·Ä
#define      MAXINT     30000
void Quick_Sort(int m,int n)   /* m°ú nÀº Àû¿ë¹üÀ§ÀÇ ½ÃÀÛ°ú ³¡ À§Ä¡ */
{
   int i,j,k,temp;

   if (m<n)
   {
      i=m;j=n+1;
      k=key[m];            /* ±âÁØÅ° */
      do {                 /* ºÐÇÒÀ» ¼öÇàÇÏ´Â do...while ¹® */
         do {              /* ¾Õ¿¡¼­ºÎÅÍ ±âÁØÅ°º¸´Ù Å« Ű ã±â */
            i=i+1;
         } while (record[i]<k);

         do {              /* µÚ¿¡¼­ºÎÅÍ ±âÁØÅ°º¸´Ù ÀÛÀº Ű ã±â */
            j=j-1;
         } while (record[j]>k);

         if (i<j)
         {                  /* Å« Ű¿Í ÀÛÀº ŰÀÇ ±³È¯ */
            temp=key[j];
            key[j]=key[i];
            key[i]=temp;
         }
      } while (i<=j);
      temp=key[j];          /* ±âÁØÅ°¿Í ÀÛÀº ŰÀÇ ±³È¯ */
      key[j]=key[m];
      key[m]=temp;
      Quick_Sort(m,j-1);    /* ¾ÕÂÊ ¸®½ºÆ®¿¡ ´ëÇÑ ºÐÇÒÀ» °è¼Ó */
      Quick_Sort(j+1,n);     /* µÚÂÊ ¸®½ºÆ®¿¡ ´ëÇÑ ºÐÇÒÀ» °è¼Ó */
   }
}

Äü Á¤·ÄÀÇ ºÐ¼®

 ¸®½ºÆ® 9ÀÇ Quick_Sort¿¡¼­ ÃÖ¾ÇÀÇ °æ¿ì´Â ¸ÅºÐÇÒÀÌ  ¼öÇàµÈ ÈÄ ³²Àº Ŷ°ªµéÀÌ ¸ðµÎ  ÇÑÂÊÀÇ
¸®½ºÆ®¿¡ Æ÷ÇԵǴ °ÍÀÌ´Ù. ¿¹¸¦ µé¸é ¾Æ·¡¿Í °°ÀÌ ÀÌ¹Ì Á¤·ÄµÈ ¸®½ºÆ®°¡ ÀÔ·ÂµÉ ¶§ ÃÖ¾ÇÀÇ °æ¿ì
¿¡ ÇØ´çÇÑ´Ù.



 µû¶ó¼­ n°³ÀÇ Å°¸¦ °®´Â ¸®½ºÆ®¿¡  ´ëÇÏ¿© ÃÖ¾ÇÀÇ °æ¿ì Àû¿ëµÇ´Â  ºÐÇÒÀÇ È½¼ö´Â n-1¹øÀÌ¸ç ¸Å
ºÐÇÒ¿¡ »ç¿ëµÇ´Â ºñ±³ÀÇ È½¼ö´Â Àû¿ëµÇ´Â  ¸®½ºÆ®¿¡ Æ÷ÇÔµÈ Å°µéÀÇ  ¼ö¿¡ ºñ·ÊÇÑ´Ù. ±×·¯¹Ç·Î  ÃÑ
¼Ò¿ä ½Ã°£Àº n+(n-1)+........+2¿¡ ºñ·ÊÇÏ°Ô µÇ¸ç O(n
2)À¸·Î Ç¥½ÃµÈ´Ù.
 ÃÖ¾ÇÀÇ °æ¿ì¿Í´Â ¹Ý´ë·Î ÃÖ¼±ÀÇ °æ¿ì´Â ¸ÅºÐÇÒÀÌ ¼öÇàµÈ ÈÄ 2°³ÀÇ ¸®½ºÆ®°¡  °°Àº Å©±â·Î Ç×»ó
³ª´©¾îÁö´Â °ÍÀ¸·Î ¼Ò¿ä½Ã°£Àº O(nlog
2n)ÀÌ¸ç Æò±Õ ¼Ò¿ä ½Ã°£µµ ¿ª½Ã O(nlog2n)À̶ó°í ¾Ë·ÁÁ®
ÀÖ´Ù.