shellSort ½© ¼ÒÆ®
void shellSort(DATA *data, int nmem, int asdes);
typedef struct {
int key; /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
int info; /* ±× ¿ÜÀÇ Çʵå */
} DATA;
data (ÀÔÃâ·Â) µ¥ÀÌÅÍ ·¹ÄÚµåÀÇ ¹è¿
nmem (ÀÔ·Â) ·¹ÄÚµå ¹è¿ÀÇ Å©±â
asdes (ÀÔ·Â) ½Â¼ø¡¤³»¸²Â÷¼øº°,0:½Â¼ø, 1:³»¸²Â÷¼ø
¾øÀ½
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;
}
}
}
±× ¾ÆÀ̵ð¾î·Î¼´Â, h¿ä¼ÒºÐ¸¸Å ¶³¾îÁø ¿ä¼Ò³¢¸®¸¦ ¿ì¼± ¼ÒÆ® ÇØ, h ÀÇ °ªÀ» Á¡Á¡ ÀÛ°Ô ÇÏ¸é¼ ¼ÒÆ®¸¦ ¹Ýº¹ÇÑ´Ù. ¸¶Áö¸·¿¡´Â, h=1À¸·Î ¼Ò Æ® ÇÑ´Ù.