Á¤·Ä(Sort)À̶õ ÀÓÀÇÀÇ ÀÚ·á ÁýÇÕÀ» ÀÏÁ¤ÇÑ ±âÁØ¿¡ µû¶ó ³ª¿ÇÏ´Â °ÍÀÌ´Ù. º¸Åë ÀÚ·áÀÇ Å©±â¼øÀ¸·Î ³ª¿Çϴµ¥ ÀÛÀº °ÍÀ» ¸ÕÀú ³ª¿ÇÏ´Â °ÍÀ» ¿À¸§Â÷¼ø(Ascending) Á¤·ÄÀ̶ó°í Çϰí Å« °ÍÀ» ¸ÕÀú ³ª¿ÇÏ´Â °ÍÀ» ³»¸²Â÷¼ø(Descending) Á¤·ÄÀ̶ó°í ÇÑ´Ù. À̶§ Å©±â¶ó´Â ±âÁØÀº ÀÚ·áÀÇ ÇüÅ¿¡ µû¶ó ´Ù¸¥µ¥ ¼öÄ¡¶ó¸é °ªÀÌ Å« ¼ö¸¦ Å©´Ù°í ÆÇ´ÜÇÏ¸ç ¹®ÀÚ¿Àº ¹®ÀÚ ÄÚµåÀÇ ¼ø¼·Î ´ë¼Ò¸¦ ÆÇ´ÜÇÑ´Ù. ¹®ÀÚ¿ ÇüÅ·ΠµÈ ¼öÄ¡³ª Äڵ尪 µîÀº ÀÚ·áÀÇ ±¸Á¶¿¡ µû¶ó ´ë¼Ò¸¦ ÆÇº°ÇÏ´Â ¹æ¹ýÀÌ ´Þ¶óÁø´Ù. ¿¹¸¦ µé¾î Á÷À§·Î Á¤·ÄÇÒ ¶§´Â »çÀå, »ó¹«, ºÎÀå, °úÀå, ´ë¸®, »ç¿ø ¼øÀÇ ¹Ì¸® Á¤ÇÑ ¼ø¼´ë·Î Á¤·ÄÇÑ´Ù.
Á¤·ÄÀº ±²ÀåÈ÷ ¿À·§µ¿¾È ¿¬±¸µÇ¾î ¿Ô°í Áö±Ýµµ ¿¬±¸ÁßÀÎ ¾Ë°í¸®ÁòÀÇ ÇϳªÀε¥ ¿ª»ç°¡ ¿À·¡µÈ¸¸Å °³¹ßµÇ¾î ÀÖ´Â ¾Ë°í¸®ÁòÀÇ ¼öµµ »ó´çÈ÷ ¸¹´Ù. ½ÇÁ¦ ¹®Á¦¿¡ ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Ë°í¸®ÁòÀÌ Àû¾îµµ ¼ö½Ê°³ Á¤µµ Àִµ¥ ÀÌ ¸¹Àº Á¤·Ä ¾Ë°í¸®ÁòÀ» ÀÏÀÏÀÌ ´Ù ¿¬±¸ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¾µ¸¸ÇÑ ¾Ë°í¸®Áò ¸î °³¸¸ ¾Ë¾Æµµ µÇ°í ¾Æ´Ï¸é Ç¥ÁØ Á¤·Ä ÇÔ¼ö¸¸ Ȱ¿ëÇØµµ Á¤·Ä ±â´ÉÀ» ¾µ ¼ö ÀÖ´Ù. ¶ÇÇÑ Çö´ëÀûÀÎ À©µµ¿ìÁî ȯ°æ¿¡¼´Â ÄÁÆ®·ÑµéÀÌ ÀÚµ¿ÈµÈ Á¤·Ä ±â´ÉÀ» Á¦°øÇϹǷΠº°µµ·Î Á¤·ÄÇØ¾ß ÇÒ °æ¿ìµµ Àû´Ù.

±×¸²Àº Ž»ö±âÀÇ ÆÄÀÏ ¸ñ·ÏÀ» Ç¥½ÃÇÏ´Â ¸®½ºÆ® ºä ÄÁÆ®·ÑÀε¥ ¾ËÆÄºª¼øÀ¸·Î ÆÄÀÏÀ» Á¤·ÄÇÏ¿© º¸¿©ÁØ´Ù. ±×·¯³ª Á¤·ÄÀº ÇмúÀûÀ¸·Î Áß¿äÇÑ Àǹ̸¦ °¡Áö´Âµ¥ Ư¼öÇÑ °æ¿ì¸¦ À§ÇÑ ÃÖÀûÈµÈ Á¤·ÄÀ» ÇØ¾ß ÇÒ °æ¿ì ÀÌ¹Ì ÀÛ¼ºµÈ Á¤·Ä ¾Ë°í¸®ÁòÀ» ¹ÙÅÁÀ¸·Î ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ´õ °í±ÞÇÑ ¾Ë°í¸®ÁòÀ» ¿¬±¸Çϰųª Á÷Á¢ ¸¸µé¾î¾ß ÇÒ ¶§ Á¤·Ä ¾Ë°í¸®ÁòÀÇ ±â¹ýµé Áß ÀϺθ¦ ÀçȰ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
Á¤·Ä ´ë»óÀº º¸Åë ·¹ÄÚµå¶ó°í ºÒ¸®´Â ±¸Á¶Ã¼Àε¥ ±¸Á¶Ã¼ÀÇ ¸â¹ö Áß¿¡ Á¤·ÄÀÇ ±âÁØÀÌ µÇ´Â ¸â¹ö¸¦ Ű(Key)¶ó°í ÇÑ´Ù. Á¤·Ä ¾Ë°í¸®ÁòÀº ·¹ÄÚµåÀÇ Å°¸¦ ºñ±³ÇÑ ÈÄ ·¹Äڵ带 Åë°·Î Á¤·ÄÇϴµ¥ Ű´Â Á¤·ÄÇÒ ¶§¸¶´Ù ´Ù¸£°Ô ÁÙ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÁÖ¼Ò·Ï µ¥ÀÌÅÍÀÇ °æ¿ì À̸§À» Ű·Î ÇÏ¿© Á¤·ÄÇÒ ¼öµµ ÀÖ°í ³ªÀ̼øÀ¸·Î Á¤·ÄÇÒ ¼öµµ ÀÖ´Ù. ¸¸¾à ´ë¼Ò°¡ °°Àº ·¹Äڵ尡 µÑ ÀÌ»ó ÀÖ´Ù¸é ÀÌ ·¹ÄÚµåµéÀ» Á¤·ÄÇÏ´Â º°µµÀÇ ÀÌÂ÷۸¦ »ç¿ëÇϱ⵵ ÇÑ´Ù.
Á¤·ÄÀÇ ¿ø¸®´Â °£´ÜÇÏ´Ù. ·¹ÄÚµåÀÇ Å°µéÀ» ºñ±³ÇØ º¸°í ¼ø¼¸¦ ¹Ù²Ü Çʿ䰡 ÀÖ´Â ·¹Äڵ带 Á¤·ÄÀÌ ¿Ï·áµÉ ¶§±îÁö ¹Ýº¹ÇÏ´Â °ÍÀÌ´Ù. °¢ Á¤·Ä ¾Ë°í¸®ÁòÀº ºñ±³ÇÒ ´ë»óÀ» ¼±Á¤ÇÏ°í ¼ø¼¸¦ Á¤ÇÏ´Â ¹æ¹ýÀÌ ´Ù¸¦ »ÓÀÌÁö ¿øÄ¢Àº µ¿ÀÏÇÏ´Ù. ¾Ë°í¸®Áòº°·Î ¸Þ¸ð¸®ÀÇ »ç¿ë·®°ú Á¤·Ä ¼Óµµ, Á¤·Ä ¹æ¹ýÀÇ º¹À⼺ÀÌ ´Ù¸£°í ¶ÇÇÑ ÀÚ·áÀÇ ¾ç°ú È¿À²ÀÇ ºñ·Ê°ü°è°¡ ´Ù¸£´Ù. ¾î¶² ¾Ë°í¸®ÁòÀº ÀÛÀº ¾ç¿¡ ´ëÇØ È¿À²ÀûÀÎ ¹Ý¸é ¾î¶² ¾Ë°í¸®ÁòÀº ÀÛÀº ¾ç¿¡ ´ëÇØ¼´Â ´À¸®Áö¸¸ ÀÚ·á°¡ ¸¹¾ÆÁ®µµ ÀÏÁ¤ÇÑ ¼Óµµ¸¦ À¯ÁöÇϱ⵵ ÇÑ´Ù. µû¶ó¼ ¸ðµç °æ¿ì¿¡ ÀûÇÕÇÑ ÃÖÀûÀÇ ¾Ë°í¸®ÁòÀº ¾øÀ¸¸ç ÀÚ·áÀÇ ÇüÅÂ¿Í ¿ëµµ¿¡ ¸Â´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù.
Á¤·Ä ¾Ë°í¸®ÁòÀº ¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î ºÐ·ùÇÒ ¼ö Àִµ¥ ¸Þ¸ð¸® ³»ºÎ¿¡¼¸¸ Á¤·ÄÇϴ°¡ ¾Æ´Ï¸é µð½ºÅ©ÀÇ ÀڷḦ Á¤·ÄÇϴ°¡¿¡ µû¶ó ³»ºÎ Á¤·Ä°ú ¿ÜºÎ Á¤·Ä·Î ³ª´©±âµµ ÇÏ°í ·¹Äڵ带 Á÷Á¢ ±³È¯Çϴ°¡ ¾Æ´Ï¸é ·¹Äڵ忡 ´ëÇÑ Æ÷ÀÎÅ͸¸ ±³È¯Çϴ°¡¿¡ µû¶ó Á÷Á¢ Á¤·Ä°ú °£Á¢ Á¤·Ä·Î ³ª´©±âµµ ÇÑ´Ù. ±×¸®°í °¢ Á¤·Ä ¾Ë°í¸®ÁòÀº °°Àº ¼ø¼ÀÇ ·¹Äڵ尡 Á¤·Ä ÈÄ¿¡µµ ¼ø¼¸¦ À¯ÁöÇϴ°¡¿¡ µû¶ó ¾ÈÁ¤¼º(Stability)ÀÇ ¿©ºÎ°¡ ´Ù¸£´Ù.
¿©±â¼´Â ÇмúÀûÀ¸·Î Àǹ̸¦ °¡Áö´Â ¾Ë°í¸®Áò°ú ½ÇÁ¦ ¸¹ÀÌ »ç¿ëÇÏ´Â ¾Ë°í¸®Áò 4°¡Áö¸¸ ±¸ÇöÇØ º¸±â·Î ÇÑ´Ù. ¸ÕÀú °£´ÜÇÑ Á¤·Ä ¾Ë°í¸®ÁòÀÎ ¹öºí Á¤·ÄºÎÅÍ ½ÃÀÛÇØ º¸ÀÚ. ¹öºí Á¤·ÄÀº ·¹ÄÚµåÀÇ ¼±µÎºÎÅÍ ÀÎÁ¢ ¿ä¼Ò¸¦ ºñ±³ÇÏ¿© Å« °ªÀ» µÚ·Î º¸³»´Â ¹æ½ÄÀ¸·Î Á¤·ÄÇϴµ¥ ÀÌ °úÁ¤À» ³¡±îÁö ¹Ýº¹ÇÏ¸é ¸ðµç ·¹Äڵ尡 Á¤·ÄµÈ´Ù. ¿¹Á¦¸¦ º¸ÀÚ.
|
¿¹ Á¦ : BubbleSort |
#include <Turboc.h>
#define SWAP(a,b) { int t;t=a;a=b;b=t; }
void BubbleSort(char *ar, int num)
{
int i,j;
for (i=0;i<num-1;i++) {
for (j=1;j<num-i;j++) {
if (ar[j-1] > ar[j]) {
SWAP(ar[j-1],ar[j]);
}
}
}
}
void main()
{
char str[]="winapi";
printf("Á¤·Ä ÀüÀÇ ¹®ÀÚ¿ : %s\n",str);
BubbleSort(str,strlen(str));
printf("Á¤·ÄµÈ ¹®ÀÚ¿ : %s\n",str);
}
winapi¶ó´Â ªÀº ¹®ÀÚ¿À» Á¤·ÄÇÑ´Ù. main¿¡¼ ÀÌ ¹®ÀÚ¿°ú ±æÀ̸¦ ¾Ë·Á ÁÖ¸é BubbleSort ÇÔ¼ö°¡ ¹®ÀÚ¿À» Á¤·ÄÇÑ´Ù.
Á¤·Ä ÀüÀÇ ¹®ÀÚ¿ : winapi
Á¤·ÄµÈ ¹®ÀÚ¿ : aiinpw
BubbleSort ÇÔ¼ö´Â µÎ °³ÀÇ ·çÇÁ·Î ±¸¼ºµÇ¾î Àִµ¥ i·çÇÁ´Â ¹®ÀÚ¿ ¼±µÎ¿¡¼ºÎÅÍ µÚ·Î À̵¿Çϰí j·çÇÁ´Â ¸Å i¿¡ ´ëÇØ num-i±îÁö ºñ±³ ¹× ±³È¯À» ¹Ýº¹ÇÑ´Ù. ¹öºí Á¤·ÄÀÌ ·¹Äڵ带 Á¤·ÄÇÏ´Â °úÁ¤À» ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

¿ÞÂÊ ±×¸²Àº i°¡ 0ÀÏ ¶§ j·çÇÁÀÇ µ¿ÀÛÀÌ´Ù. j´Â 1ºÎÅÍ ¹®ÀÚ¿ ³¡±îÁö À̵¿Çϸé j¹øÂ° ÀÚ¸®ÀÇ ·¹ÄÚµå¿Í ¹Ù·Î ¿ÞÂÊÀÇ ·¹Äڵ带 ºñ±³ÇÏ¿© ¿ÞÂÊÀÌ ´õ Å©´Ù¸é µÎ °ªÀ» ±³È¯ÇÏ¿© Å« °ªÀ» µÚ·Î º¸³½´Ù. ÃÖÃÊ j°¡ 1ÀÏ ¶§ ar[1]ÀÇ i¿Í ar[0]ÀÇ w¸¦ ºñ±³Çϴµ¥ w°¡ ´õ Å©¹Ç·Î µÎ ·¹Äڵ带 ±³È¯ÇÏ¿© iw·Î ¸¸µç´Ù. ´ÙÀ½ j·çÇÁ¿¡¼ °è¼Ó µÎ ·¹Äڵ带 ºñ±³ÇÏ¿© w¸¦ µÚÂÊÀ¸·Î ¿¬¼ÓÀûÀ¸·Î À̵¿½Ã۴µ¥ j·çÇÁ°¡ ³¡³ª¸é Á¦ÀÏ Å« ·¹Äڵ尡 °¡Àå µÚÂÊÀ¸·Î À̵¿µÇ¾î ¸¶Áö¸· ·¹ÄÚµåÀÇ Á¤·ÄÀÌ ¿Ï·áµÈ´Ù.
´ÙÀ½ i ·çÇÁ¿¡¼ ¹è¿ óÀ½ºÎÅÍ ÀÌ °úÁ¤À» ¹Ýº¹Ç쵂 ¸¶Áö¸· ·¹ÄÚµå´Â Á¤·ÄµÇ¾úÀ¸¹Ç·Î ´õ ÀÌ»ó Á¤·ÄÇÒ Çʿ䰡 ¾ø´Ù. ±×·¡¼ j·çÇÁ´Â num-i±îÁö¸¸ ¹Ýº¹Çϵµ·Ï Çß´Ù. i°¡ 1ÀÏ ¶§ j´Â µÚÂÊÀ¸·Î À̵¿Çϸç n°ú a¸¦ ±³È¯Çϰí p¿Í i¸¦ ±³È¯ÇÑ´Ù. n°ú a°¡ ±³È¯µÈ Á÷ÈÄ¿¡ n°ú pµµ ºñ±³µÇ´Âµ¥ À̶§´Â p°¡ ´õ Å©¹Ç·Î µÎ ·¹Äڵ带 ±³È¯ÇÏÁö ¾Ê´Â´Ù. i°¡ 1ÀÏ ¶§ÀÇ ·çÇÁ¿¡¼ ³²Àº ¹®ÀÚÁß Á¦ÀÏ Å« p°¡ ´Ù½Ã Á¦ÀÏ µÚÂÊÀ¸·Î À̵¿ÇÑ´Ù. ¹öºí Á¤·ÄÀº ÀÌ·± ½ÄÀ¸·Î Á¦ÀÏ Å« °ªÀ» µÚ·Î °è¼Ó º¸³»µÇ Áß°£ÀÇ ÀÎÁ¢ ·¹Äڵ嵵 ´ëÃæ ±³È¯ÇØ µÐ´Ù.
i°¡ 2ÀÏ ¶§ j´Â ´Ù½Ã ¹è¿ óÀ½ºÎÅÍ ¼øÈ¸ÇÏ¸é¼ i¿Í a¸¦ ±³È¯Çϰí n°ú i¸¦ ±³È¯ÇÏ¿© nÀ» Á¦ÀÏ µÚ·Î º¸³½´Ù. i°¡ 3ÀÏ ¶§´Â ´õ ÀÌ»ó ¹Ù²Ü ·¹Äڵ尡 ¾øÀ¸¹Ç·Î ÀÌ ´Ü°è¿¡¼ Á¤·ÄÀÌ ¿Ï·áµÈ´Ù. ºñ±³¿Í ±³È¯¿¡ ÀÇÇØ ÀÛÀº ·¹ÄÚµå´Â ¹è¿ ¾ÕÂÊ¿¡ ¸ðÀ̰í Å« ·¹ÄÚµå´Â µÚÂÊÀ¸·Î À̵¿ÇÑ´Ù.
¹öºí Á¤·ÄÀº µÎ °ªÀ» ºñ±³ÇÒ ¶§ ¿ÞÂÊÀÌ ´õ Å« °æ¿ì¸¸ ±³È¯ÇϹǷΠ°°Àº Å©±âÀÇ ·¹ÄÚµå´Â ¿ø·¡ÀÇ ¼ø¼¸¦ À¯ÁöÇϴ Ư¼ºÀÌ ÀÖ´Ù. À§ ¿¹¿¡¼ µÎ °³ÀÇ i°¡ Àִµ¥ Á¤·ÄµÈ ÈÄ¿¡µµ µÎ iÀÇ ¼ø¼°¡ ¹Ù²îÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë ¼ö Àִµ¥ ÀÌ·± Ư¼ºÀ» ¾ÈÁ¤¼ºÀ̶ó°í ÇÑ´Ù. ±×·¯³ª ¹öºí Á¤·ÄÀº ¾Ë°í¸®ÁòÀÌ ³Ê¹« °£´ÜÇØ¼ Á¤·Ä ¼Óµµ´Â ±×¸® ½â ÁÁÁö ¸øÇÏ´Ù. ºñ±³¿Í ±³È¯À» ³Ê¹« ÀÚÁÖ Çϱ⠶§¹®¿¡ Á¤·Ä Áß¿¡ ÀÌ¹Ì Á¤·ÄÀÌ ¿Ï·áµÇ´Â °æ¿ìµµ ÀÖ´Ù. ÀÌ·± °æ¿ì´Â ±³È¯ Ç÷¡±×¸¦ »ç¿ëÇÏ¿© ¾à°£ÀÇ ½Ã°£ Àý¾àÀ» ÇÒ ¼ö ÀÖ´Ù.
void BubbleSort2(char *ar, int num)
{
int i,j;
BOOL bChange;
for (i=0;i<num-1;i++) {
bChange=FALSE;
for (j=1;j<num-i;j++) {
if (ar[j-1] > ar[j]) {
SWAP(ar[j-1],ar[j]);
bChange=TRUE;
}
}
if (bChange==FALSE) break;
}
}
bChange¶ó´Â Áö¿ªº¯¼ö¸¦ ¼±¾ðÇϰí j·çÇÁ¿¡ µé¾î°¡±â Àü¿¡ ÀÌ °ªÀ» FALSE·Î ¼³Á¤ÇÑ ÈÄ °ªÀ» ±³È¯ÇÒ ¶§ TRUE·Î º¯°æÇÑ´Ù. ¸¸¾à j·çÇÁ°¡ ³¡³ ÈÄ¿¡ bChange°¡ FALSE°ªÀ» À¯ÁöÇϰí ÀÖ´Ù¸é ÇÑ ¹øµµ ±³È¯ÀÌ ÀϾÁö ¾Ê¾ÒÀ¸¹Ç·Î À̶§ Á¤·ÄÀÌ ¿Ï·áµÈ °ÍÀ¸·Î ÆÇ´ÜÇÏ¿© Áï½Ã i·çÇÁ¸¦ Å»ÃâÇÑ´Ù.
Ç÷¡±×¸¦ »ç¿ëÇÏ¸é ºñ±³ ȸ¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖÁö¸¸ Ç÷¡±× °ªÀ» ´ëÀÔÇÏ´Â °Íµµ ½Ã°£ÀÌ µé±â ¶§¹®¿¡ ²À ÀÌ ¹æ¹ýÀÌ ºü¸£´Ù°í¸¸Àº ÇÒ ¼ö ¾ø´Ù. ·çÇÁ ³¡±îÁö Á¤·ÄµÇÁö ¾Ê´Â´Ù¸é Ç÷¡±×´Â ¾Æ¹«·± ¿ªÇÒµµ ÇÏÁö ¸øÇÏ°í ½Ã°£¸¸ ±î¸Ô°Ô µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ °ÅÀÇ Á¤·ÄµÈ ·¹Äڵ忡 ´ëÇØ¼´Â ÀÌ Ç÷¡±×°¡ È®½ÇÈ÷ È¿°ú°¡ Àִµ¥ ÀÌ¹Ì Á¤·ÄµÈ ¹è¿¿¡ »õ·Î¿î ·¹Äڵ尡 »ðÀԵǾúÀ» ¶§´Â ·çÇÁ ¹Ýº¹ ȸ¼ö¸¦ ´ëÆø ÁÙÀÏ ¼ö ÀÖ´Ù. "abdfskz"¸¦ ÀÌ ¹æ¹ýÀ¸·Î Á¤·ÄÇÒ °æ¿ì s¿Í k¸¸ ¹Ù²Ù¸é Á¤·ÄÀÌ ¿Ï·áµÈ´Ù.