Äü Á¤·Ä(Quick Sort)Àº À̸§ ±×´ë·Î ¼Óµµ°¡ ´ë´ÜÈ÷ ºü¸¥ Á¤·Ä ¾Ë°í¸®ÁòÀÌ´Ù. Å« ¹è¿À» ÀÏÁ¤ÇÑ ±âÁذªÀ» °æ°è·Î ÇÏ¿© ±âÁذªº¸´Ù Å« °ªµé°ú ÀÛÀº °ªµé·Î ±¸¼ºµÈ ÀÛÀº µÎ °³ÀÇ ¹è¿·Î ºÐÇÒÇÑ´Ù. ±×¸®°í ºÐÇÒµÈ °¢ ¹è¿À» ¶È°°Àº ¹æ¹ýÀ¸·Î ´Ù½Ã Á¤·ÄÇÏ´Â Á¡ÁøÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. ¿¹Á¦¸¦ º¸ÀÚ.
|
¿¹ Á¦ : QuickSort |
#include <Turboc.h>
#define SWAP(a,b) { int t;t=a;a=b;b=t; }
void QuickSort(char *ar, int num)
{
int left,right;
char key;
// ±¸°£ÀÌ 1À̸é Á¤·Ä ³¡
if (num <= 1) return;
// ±âÁذª °áÁ¤ : ¹è¿»óÀÇ Á¦ÀÏ ³¡ ¿ä¼Ò
key=ar[num-1];
for (left=0,right=num-2;;left++,right--) {
while (ar[left] < key) { left++; }
while (ar[right] > key) { right--; }
if (left >= right) break; // Á¿찡 ¸¸³ª¸é ³¡
SWAP(ar[left],ar[right]);
}
SWAP(ar[left],ar[num-1]); // ±âÁذª°ú iÀ§Ä¡ÀÇ °ª ±³È¯
QuickSort(ar,left); // ¿ÞÂÊ ±¸°£ Á¤·Ä
QuickSort(ar+left+1,num-left-1); // ¿À¸¥ÂÊ ±¸°£ Á¤·Ä
}
void main()
{
char str[]="greathuman";
printf("Á¤·Ä ÀüÀÇ ¹®ÀÚ¿ : %s\n",str);
QuickSort(str,strlen(str));
printf("Á¤·ÄµÈ ¹®ÀÚ¿ : %s\n",str);
}
"greatehuman"À̶ó´Â ¹®ÀÚ¿À» Äü Á¤·ÄÇϸé "aaeghmnrtu"°¡ µÈ´Ù. Å« ¹è¿À» ºÐÇÒÇϱâ À§ÇØ ¸ÕÀú ±âÁذªÀ» ¼±Á¤Çϴµ¥ ¹è¿ ¼±µÎ³ª ¸¶Áö¸·À» ±âÁذªÀ¸·Î »ç¿ëÇÏ´Â °ÍÀÌ °¡Àå ½±´Ù. ±×¸®°í for ·çÇÁ¿¡¼ ¹è¿ÀÇ ¿ÞÂʰú ¿À¸¥ÂÊ¿¡ °¢°¢ left, right Æ÷ÀÎÅ͸¦ µÎ°í Áß¾ÓÀ¸·Î À̵¿ÇÏ¸é¼ left¿¡ ±âÁذªº¸´Ù Å« °ª, right¿¡ ±âÁذªº¸´Ù ÀÛÀº °ªÀ» ã´Â´Ù. ±×¸®°í µÎ °ªÀ» ±³È¯ÇÏ¿© ±âÁذªº¸´Ù ÀÛÀº °ªÀº ¹è¿ÀÇ ¿ÞÂÊÀ¸·Î º¸³»°í Å« °ªÀº ¿À¸¥ÂÊÀ¸·Î º¸³½´Ù.
ÀÌ °úÁ¤À» left¿Í right°¡ ¸¸³¯ ¶§±îÁö ¹Ýº¹Çϴµ¥ À̶§ left ´Â ±âÁذªº¸´Ù Å« °ªÀ» °¡¸®Å²´Ù. left¿Í ±âÁذªÀ» ±³È¯ÇÏ¿© left°¡ °¡¸®Å°´Â °ªÀ» ¹è¿ ³¡À¸·Î º¸³»¸é ±âÁذªÀÇ ¿ÞÂÊ¿¡´Â ÀÌ °ªº¸´Ù ÀÛÀº °ª¸¸ ÀÖ°í ¿À¸¥ÂÊ¿¡´Â ´õ Å« °ª¸¸ ÀÖÀ» °ÍÀÌ´Ù. ±âÁذªÀÌ ÀÖ´Â À§Ä¡ÀÇ ¿ÞÂÊ ±¸°£°ú ¿À¸¥ÂÊ ±¸°£À» ¶È°°Àº ¹æ¹ýÀ¸·Î Á¤·ÄÇ쵂 ±¸°£ Å©±â°¡ 1ÀÌ µÉ ¶§±îÁö ÀÌ °úÁ¤À» ¹Ýº¹Çϸé Àüü ¹è¿ÀÌ Á¤·ÄµÈ´Ù. ±×¸²À¸·Î À§ ¿¹Á¦ÀÇ µ¿ÀÛÀ» °üÂûÇØ º¸ÀÚ.

ÀÌ ¿¹¿¡¼ ±âÁذªÀº ¹è¿ Á¦ÀÏ ³¡¿¡ ÀÖ´Â nÀ¸·Î ¼±Á¤µÇ¾ú´Ù. left´Â ¹è¿ ¼±µÎ¿¡¼ºÎÅÍ µÚÂÊÀ¸·Î À̵¿ÇÏ¸é¼ nº¸´Ù ´õ Å« °ªÀ» ã°í right´Â ¹è¿ ³¡¿¡¼ºÎÅÍ ¾ÕÂÊÀ¸·Î À̵¿ÇÏ¸é¼ nº¸´Ù ´õ ÀÛÀº °ªÀ» ã´Â´Ù. for ¹® ¾ÈÀÇ while·çÇÁ°¡ ÀÌ °Ë»öÀ» ¼öÇàÇϴµ¥ ÀÌ ¿¹¿¡¼´Â ÃÖÃÊ left¿¡ rÀÌ °Ë»öµÇ°í right¿¡ a°¡ °Ë»öµÈ´Ù. °Ë»öµÈ µÎ °ªÀ» ±³È¯ÇÏ¿© ÀÛÀº °ªÀº °¡±ÞÀû ¹è¿ÀÇ ¿ÞÂÊÀ¸·Î º¸³»°í Å« °ªÀº °¡±ÞÀû ¹è¿ÀÇ ¿À¸¥ÂÊÀ¸·Î º¸³½´Ù. ´ÙÀ½ ·çÇÁ¿¡¼ left¿Í right´Â °è¼Ó Áß¾ÓÀ¸·Î À̵¿ÇÏ¿© °¢°¢ t¿Í mÀ» ã¾Æ µÎ °ªÀ» ±³È¯ÇÑ´Ù.
ÀÌ °úÁ¤À» left°¡ rightº¸´Ù ´õ ÀÛÀ» µ¿¾È¿¡ ¹Ýº¹Çϴµ¥ ¼¼ ¹øÂ° ´Ü°è¿¡¼ right°¡ h, left°¡ u¸¦ °¡¸®Å³ ¶§ µÎ Æ÷ÀÎÅÍ´Â À̵¿À» ÁßÁöÇÑ´Ù. ±×¸®°í ±âÁذª nÀ» left À§Ä¡ÀÇ °ª(±âÁذªº¸´Ù´Â ´õ Å©´Ù)°ú ±³È¯ÇÏ¸é ±âÁذªÀ» °æ°è·Î ÇÏ¿© ¿ÞÂÊ¿¡´Â nº¸´Ù ´õ ÀÛÀº °ª¸¸ ³²°í ¿À¸¥ÂÊ¿¡´Â ´õ Å« °ª¸¸ ³²°Ô µÈ´Ù. ÀÌ »óŸ¦ ¸¸µé¸é ¿ÞÂÊ, ¿À¸¥ÂÊ ±¸°£Àº ¾ÆÁ÷ Á¤·ÄÀÌ ´ú µÇ¾úÁö¸¸ ÁÂ¿ì ±¸°£°ú ±âÁذª ¼¼ ¿ä¼Ò¸¸ º¸¸é Á¤·ÄÀÌ ¿Ï·áµÇ¾ú´Ù.
³²Àº ÀÏÀº ÁÂ¿ì ±¸°£À» °³º°ÀûÀ¸·Î ´Ù½Ã Á¤·ÄÇÏ´Â °ÍÀε¥ ÀÌ ¹®Á¦´Â ÃÖÃÊÀÇ Á¤·Ä ¹®Á¦¿Í µ¿ÀÏÇϹǷΠÀç±Í È£Ãâ·Î ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ÁÂ¿ì ±¸°£ÀÇ ½ÃÀÛÁ¡°ú ±æÀ̸¦ ÀûÀýÈ÷ °è»êÇØ¼ QuickSort ÇÔ¼ö¸¦ ´Ù½Ã È£ÃâÇÑ´Ù. QuickSort ÇÔ¼ö´Â ÁÖ¾îÁø Å©±âÀÇ ¹è¿À» Á¤·ÄÇ쵂 ±¸°£ ±æÀ̰¡ 1¹Û¿¡ ¾ÈµÉ ¶§´Â Á¤·ÄÀÌ ÀÌ¹Ì ¿Ï·áµÈ °ÍÀ¸·Î º¸°í °ð¹Ù·Î ¸®ÅÏÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ±¸°£ÀÇ ³¡ °ªÀ» ±âÁØÀ¸·Î ´Ù½Ã Á¤·ÄÇϰí ÀÌ ´Ü°è¿¡¼ »ý±ä ¶Ç ´Ù¸¥ ÀÛÀº ±¸°£µéÀ» Á¤·ÄÇϱâ À§ÇØ Àç±Í È£ÃâÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù.
Äü Á¤·ÄÀÇ ¼º´ÉÀº ±âÁذªÀ» ¾î¶»°Ô ¼³Á¤Çϴ°¡¿¡ µû¶ó °áÁ¤µÇ´Âµ¥ ±âÁذªÀÌ Áß°£°ª¿¡ °¡±î¿ï¼ö·Ï ÁÂ¿ì ±¸°£ÀÌ ±ÕÀÏÇÏ°Ô ºÐÇÒµÇ¾î ´õ »¡¸® Á¤·ÄÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿¹Á¦¿¡¼´Â ¹è¿ÀÇ Á¦ÀÏ ³¡°ªÀ» ÃëÇ߱⠶§¹®¿¡ ¿î¿¡ µû¶ó ±âÁذªÀÌ °áÁ¤µÇ¸ç ÀÌ¹Ì Á¤·ÄµÇ¾î ÀÖÀ» °æ¿ì Ç×»ó Å« °ªÀÌ ¼±ÅÃµÇ¾î ¿ÞÂÊ ±¸°£¸¸ Ä¿Áö´Â ¹®Á¦°¡ ÀÖ´Ù. ±×·¡¼ ±âÁذªÀ» ³¼ö·Î ¼±ÅÃÇÏ¿© ÇÑÂÊÀ¸·Î Ä¡¿ìħÀ» ¹æÁöÇϰųª ¾Æ´Ï¸é ÀûÀýÇÑ Áß°£°ªÀ» ÃëÇÏ´Â ¹æ¹ýÀ» ¾²±âµµ ÇÑ´Ù.
¶Ç Àç±Í È£ÃâÀ» Çϱ⠶§¹®¿¡ ¹è¿ÀÌ ¾ÆÁÖ Å¬ °æ¿ì ½ºÅà ¿À¹öÇ÷ο찡 ¹ß»ýÇÒ À§ÇèÀÌ Àִµ¥ ÀÌ·² ¶§´Â ÀÚü ½ºÅÃÀ» ¸¸µé¾î ºñÀç±ÍÇÏ´Â ¹æ½ÄÀ¸·Î °³¼±ÇÒ ¼ö ÀÖ´Ù. ¾Æ´Ï¸é ±¸°£ÀÌ ¾ÆÁÖ ÀÛÀ» ¶§´Â ´õ ÀÌ»ó Àç±Í È£ÃâÀ» ÇÏÁö ¸»°í ¼±Åà Á¤·ÄÀ̳ª »ðÀÔ Á¤·Ä°°Àº Á» ´õ °£´ÜÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ´Â ¹æ¹ýµµ ÈçÈ÷ »ç¿ëµÈ´Ù. ±×·¯³ª ¿äÁòÀº ½ºÅà ũ±â°¡ ¾ÆÁÖ ³Ë³ËÇϱ⠶§¹®¿¡ ±»ÀÌ ºñÀç±Í ¹æ½ÄÀ¸·Î ¹Ù²Ü ÇÊ¿ä±îÁö´Â žb´Ù.
Äü ¼ÒÆ®´Â ´Ù¸¥ Á¤·Ä ¾Ë°í¸®Áò¿¡ ºñÇØ »ó´ëÀûÀ¸·Î ¼Óµµ°¡ ºü¸£°í Å« ¹è¿¿¡ ´ëÇØ¼µµ Àß µ¿ÀÛÇϱ⠶§¹®¿¡ °¡Àå ³Î¸® »ç¿ëµÇ´Â Á¤·Ä ¾Ë°í¸®ÁòÀÌ´Ù. ±×·¡¼ C Ç¥ÁØ ¶óÀ̺귯¸®´Â Äü ¼ÒÆ® ÇÔ¼öÀÎ qsort ÇÔ¼ö¸¦ Á¦°øÇϴµ¥ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÀÓÀÇÀÇ ¹è¿¿¡ ´ëÇØ Äü ¼ÒÆ®¸¦ ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¶È°°Àº ¹®ÀÚ¿À» Ç¥ÁØ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Äü ¼ÒÆ®ÇÑ´Ù.
|
¿¹ Á¦ : qsort |
#include <Turboc.h>
int compare(const void *a, const void *b)
{
if (*(char *)a == *(char *)b) return 0;
if (*(char *)a > *(char *)b) return 1;
return -1;
}
void main()
{
char str[]="greathuman";
printf("Á¤·Ä ÀüÀÇ ¹®ÀÚ¿ : %s\n",str);
qsort(str,strlen(str),sizeof(char),compare);
QuickSort(str,strlen(str));
printf("Á¤·ÄµÈ ¹®ÀÚ¿ : %s\n",str);
}
Ãâ·Â °á°ú´Â ¾ÕÀÇ ¿¹¿Í µ¿ÀÏÇÏ´Ù. qsort´Â Äü ¼ÒÆ® ¾Ë°í¸®Áò´ë·Î ±¸°£À» ³ª´©¾î µ¥ÀÌÅ͸¦ ±³È¯Çϴµ¥ ´Ü, ºñ±³´Â µ¥ÀÌÅÍ Å¸ÀÔ¸¶´Ù ´Ù¸£¹Ç·Î »ç¿ëÀÚ°¡ Á÷Á¢ ÇØ¾ß ÇÑ´Ù. ºñ±³ÇÏ´Â ÇÔ¼ö¸¦ ¹Ì¸® ¸¸µé¾î µÎ°í qsort ÇÔ¼öÀÇ ¸¶Áö¸· Àμö·Î ºñ±³ ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ¸é µÈ´Ù. Ç¥ÁØ qsort ÇÔ¼ö´Â ¾î¼Àºí¸®·Î °íµµ·Î ÃÖÀûȵǾî ÀÛ¼ºµÇ¾úÁö¸¸ Àç±Í È£Ãâ»Ó¸¸ ¾Æ´Ï¶ó ºñ±³¸¦ À§ÇØ ÇÔ¼ö¸¦ È£ÃâÇϱ⵵ ÇϹǷΠ¼Óµµ´Â ¿ÀÈ÷·Á Á÷Á¢ ¸¸µç ÇÔ¼öº¸´Ù ´õ ´À¸®´Ù.
»ç½Ç ÀÌ ÇÔ¼ö¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é Á¤·ÄÀ» Çϴµ¥´Â º° ºÒÆíÇÔÀÌ ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª qsort°¡ ¾Æ¹«¸® ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼ Àß µ¿ÀÛÇÑ´Ù ÇÏ´õ¶óµµ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Æ¯¼ö¼ºÀ» °¨¾ÈÇϸé ÀÌ ÇÔ¼ö·Î ¸ðµç Á¤·ÄÀ» ´Ù ÇÒ ¼ö´Â ¾ø´Ù. ¿¹¸¦ µé¾î Çѱ۰ú ¿µ¹®ÀÌ ¼¯¿© ÀÖ´Â ¹®ÀÚ¿Àº qsort ÇÔ¼ö·Î Á¤·ÄÇÒ ¼ö ¾øÀ¸¸ç Á÷Á¢ Á¤·Ä ÇÔ¼ö¸¦ ¸¸µé¾î ½á¾ß ÇÑ´Ù.