1. ¿ø ¸®
ÁÖ¾îÁø ÀÔ·Â ¸®½ºÆ®¸¦ Àû´çÇÑ ¸Å°³ º¯¼öÀÇ °ª¸¸Å ¼·Î ¶³¾îÁø ·¹ÄÚµåµé°ú ºñ±³ÇÏ¿© ±³È¯ÇÏ´Â °úÁ¤À» ¸Å°³ º¯¼ö °ªÀ» ¹Ù²Ù¾î°¡¸ç µÇÇ®ÀÌ ÇÏ´Â °Í. ÀÌ ¶§ ¼·Î ¶³¾îÁ® ÀÖ´Â ·¹ÄÚµåµéÀº ÇϳªÀÇ ºÎºÐ ¸®½ºÆ®¸¦ ±¸¼ºÇϸç À̵éÀº ´Ù¸¥ Á¤·Ä ¹æ¹ý(º¸Åë »ðÀÔ Á¤·Ä)¿¡ ÀÇÇØ °³º°ÀûÀ¸·Î Á¤·ÄµÈ´Ù.
¸Å°³º¯¼öÀÇ °ªÀº ÈçÈ÷ ÁõºÐ(increment)À̶ó°í ºÎ¸£´Âµ¥ ¸ÕÀú ÀûÀýÇÑ °ªÀ» ¼±ÅÃÇÑ ÈÄ¿¡ Á¡Â÷ °¨¼Ò½ÃÄÑ °¡¸é¼ ¼Ð Á¤·ÄÀ» ¼öÇàÇÏ°í ¸Å°³ º¯¼öÀÇ °ªÀÌ 1 ÀÌ µÉ ¶§ Á¾·áÇÑ´Ù.
[¿¹Á¦] inc = 8 ÀÌ°í ÀÔ·Â ·¹Äڵ带 (8,3,5,6,2,1,7,4)¶ó°í ÇÒ ¶§ ¼Ð Á¤·ÄÀ» ¼öÇàÇÑ °úÁ¤ ¹× °á°ú.
Ãʱ⠻óÅ : 8,3,5,6,2,1,7,4 ÁõºÐ = 5 ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦«¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ ¦£¦¡¦«¦¡¦«¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ 8 3 5 6 2 1 7 4 ºÎºÐ¸®½ºÆ® : {8,1}, {3,7}, {5,4}, {6}, {2} (°¢ ºÎºÐµéÀ» °³º° ºñ±³ÇÏ¿© À§Ä¡¹Ù²Þ ÇÑ´Ù) Á¤·Ä ÈÄ : 1,3,4,6,2,8,7,5 ÁõºÐ = 3 ¦£¦¡¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦«¦¡¦¡¦¡¦¨¦¡¦«¦¡¦¡¦¡¦¤ ¦£¦¡¦«¦¡¦«¦¡¦¨¦¡¦«¦¡¦«¦¡¦¤ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ 1 3 4 6 2 8 7 5
ºÎºÐ¸®½ºÆ® : {1,6,7}, {3,2,5}, {4,8} (¿ª½Ã, °¢ ºÎºÐµéÀ» °³º° ºñ±³ Á¤·Ä ÇÑ´Ù) Á¤·Ä ÈÄ : 1,2,4,6,3,8,7,5 ÁõºÐ = 1 ¦£¦¡¦¨¦¡¦¨¦¡¦¨¦¡¦¨¦¡¦¨¦¡¦¨¦¡¦¤ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ 1 2 4 6 3 8 7 5
ºÎºÐ¸®½ºÆ® : {1,2,4,6,3,8,7,5} Á¤·Ä ÈÄ : 1,2,3,4,5,6,7,8
2. ¼Ð Á¤·ÄÀ» ¼öÇàÇÏ´Â ÇÔ¼ö
#define INFO_LEN 256 #define MAX_REC 256
struct sList { int count; struct item { char info[INFO_LEN] ; int key ; } rec[MAX_REC] ; }
void Shell_Sort (struct sList *LIST) { int inc, first;
inc = LIST->count;
while (inc != 1) { inc = inc/3 + 1; for (first = 0 ; first < inc ; first++) Sort (first, inc, LIST) ; /* Sort()ÇÔ¼ö´Â ÀûÀýÇÑ ³»ºÎÁ¤·Ä¹æ¹ý »ç¿ëÇؼ Á÷Á¢ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù (´Ü¼øÅ©±âºñ±³) */ } }
¡Ø Shell Sort ´Â ÁõºÐ(increment)ÀÇ Å©±â¸¦ ¾î¶»°Ô Àâ´À³Ä¿¡ µû¶ó ½ÇÇà ¼Óµµ¿¡ ¿µÇâÀ» ÁÝ´Ï´Ù.
EOF : 2007-04-19 (Poseidon)
|
|
|