½© ¼ÒÆ®


ÇÔ¼ö¸í
shellSort  ½© ¼ÒÆ®
Çü½Ä
void shellSort(DATA *data, int nmem, int asdes);
Àμö
typedef struct {
    int key;        /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
    int info;       /* ±× ¿ÜÀÇ Çʵå */
} DATA;

data   (ÀÔÃâ·Â) µ¥ÀÌÅÍ ·¹ÄÚµåÀÇ ¹è¿­
nmem   (ÀÔ·Â) ·¹ÄÚµå ¹è¿­ÀÇ Å©±â
asdes  (ÀÔ·Â) ½Â¼ø¡¤³»¸²Â÷¼øº°,0:½Â¼ø, 1:³»¸²Â÷¼ø
ÇÔ¼öÄ¡
¾øÀ½
ÁÖÀÇ »çÇ×

¿ë·Ê(shellSort-test.c )

ÇÁ·Î±×·¥(shellSort.c )
void shellSort(DATA *data, int nmem, int asdes)
{
    int i, j, k;
    int h;
    DATA t;

    for (h = 1; h <= nmem; h = 3*h + 1);

    while ((h = h/3) >= 1) {
        for (i = h; i < nmem; i++) {
            t.key = data[i]. key;
            t.info = data[i]. info;
            for (j = i - h; j >= 0; j -= h)
                if (asdes == 0) {
                    if (data[j]. key > t.key) {
                        data[j+h]. key = data[j]. key;
                        data[j+h]. info = data[j]. info;
                    } else break;
                } else {
                    if (data[j]. key < t.key) {
                        data[j+h]. key = data[j]. key;
                        data[j+h]. info = data[j]. info;
                    } else break;
                }
            data[j+h]. key = t.key;
            data[j+h]. info = t.info;
        }
    }
}
¼³¸í
»ðÀÔ ¼ÒÆ®°¡ ´ÊÀº °ÍÀº, ±ÙóÀÇ ¿ä¼Ò³¢¸® ¹Û¿¡ ±³È¯ÇÏÁö ¾Ê±â ¶§¹®¿¡ÀÌ´Ù. ¿¹¸¦ µé¾î, ÃÖ¼ÒÀÇ ¿ä¼Ò°¡ ¿ì¿¬È÷ ¸¶Áö¸·¿¡ ÀÖ¾úÀ» °æ¿ì´Â, ±×°ÍÀ» ÃÖÃÊ·Î ÀÌ µ¿ ½ÃÅ°·Á¸é NȸÀÇ ºñ±³¿Í ±³È¯ °É¸°´Ù. ½© ¼ÒÆ®´Â, »ðÀÔ ¼ÒÆ®ÀÇ ÀÇ È®ÀåÀ¸·Î¼­ ¸Ö°Ô ¶³¾îÁ® ÀÖ´Â ¿ä¼ÒÀÇ »çÀÌ¿¡¼­µµ ±³È¯Çϵµ·Ï(µíÀÌ) °í¼ÓÈ­¸¦ µµ¸ðÇÑ °ÍÀÌ´Ù.

±× ¾ÆÀ̵ð¾î·Î¼­´Â, h¿ä¼ÒºÐ¸¸Å­ ¶³¾îÁø ¿ä¼Ò³¢¸®¸¦ ¿ì¼± ¼ÒÆ® ÇØ, h ÀÇ °ªÀ» Á¡Á¡ ÀÛ°Ô Çϸ鼭 ¼ÒÆ®¸¦ ¹Ýº¹ÇÑ´Ù. ¸¶Áö¸·¿¡´Â, h=1À¸·Î ¼Ò Æ® ÇÑ´Ù.

°ü·Ã ÇÔ¼ö
¼±Åà ¼ÒÆ®, »ðÀÔ ¼ÒÆ®, ¹öºí ¼ÒÆ®, Äü ¼ÒÆ®