Äü ¼ÒÆ®


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

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

¿ë·Ê(quickSort-test.c )

ÇÁ·Î±×·¥(quickSort.c )
void quickSort(DATA *data, int nmem, int asdes)
{
    static void rquickSort();

    if (nmem <= 1) return;
    rquickSort(data, asdes, 0, nmem - 1);
}

static void rquickSort(DATA *data, int asdes, int first, int last)
{
    int i, j, x;
    static void swap();

    i = first;
    j = last;
    x = (data[i]. key + data[j]. key)/2;
    while (i < j) {
        if (asdes == 0) {
            while (data[i]. key < x) i++;
            while (data[j]. key > x) j--;
        } else {
            while (data[i]. key > x) i++;
            while (data[j]. key < x) j--;
        }
        if (i < j) {
            swap(&data[i], &data[j]);
            i++;
            j--;
        }
    }
    if (first < i - 1) rquickSort(data, asdes, first, i - 1);
    if (last  > j + 1) rquickSort(data, asdes, j + 1, last);
}

static void swap(DATA *a, DATA *b)
{
    DATA t;

    t.key   = a->key;
    t.info  = a->info;
    a->key  = b->key;
    a->info = b->info;
    b->key  = t.key;
    b->info = t.info;
}
¼³¸í
C. A. R. Hoare (È£¾Æ)¿¡ ÀÇÇÑ Äü ¼ÒÆ®(quick sort)´Â, Æò±ÕÀûÀ¸·Î °¡Àå ºü¸¥ ¼ÒÆ® ¾Ë°í¸®ÁòÀ̶ó°í ¸»ÇØÁö°í ÀÖ´Ù. Äü ¼ÒÆ®¿¡¼­´Â, ½Â¼ø ¼ÒÆ®ÀÇ °æ¿ì,
  1. Àû´çÇÑ °ª x ¸¦ ¼±ÅÃÇÑ´Ù. ±× ¶§, ¹è¿­ÀÇ x ÀÌÇÏÀÇ ¿ä¼ÒÀÇ ¼ö¿Í x ÀÌ»óÀÇ ¿ä¼ÒÀÇ ¼ö´Â µÉ ¼ö ÀÖµµ·Ï µ¿ÀÏÇÑ Á¤µµ°¡ µÇµµ·Ï(µíÀÌ) ÇÑ´Ù.
  2. x ÀÌÇÏÀÇ ¿ä¼Ò¸¦ ¹è¿­ÀÇ Àü¹Ý¿¡, x ÀÌ»óÀÇ ¿ä¼Ò¸¦ ¹è¿­ÀÇ ÈĹݿ¡ ¸ðÀº´Ù.
  3. ¹è¿­ÀÇ Àü¹ÝÀÌ ¿ä¼Ò¼ö°¡ 2ÀÌ»óÀ̶ó¸é, ¹è¿­ÀÇ Àü¹ÝÀ» Àç±ÍÀûÀ¸·Î Äü ¼ÒÆ® ÇÑ´Ù.
  4. ¹è¿­ÀÇ ÈĹÝÀÌ ¿ä¼Ò¼ö°¡ 2ÀÌ»óÀ̶ó¸é, ¹è¿­ÀÇ ÈĹÝÀ» Àç±ÍÀûÀ¸·Î Äü ¼ÒÆ® ÇÑ´Ù.
ÀÌ¿Í °°ÀÌ, ¹è¿­À» °è¼ÓÇؼ­ 2°³(»ì)·Î ÇØ, °¢°¢ ºÙ¾î ¼ÒÆ®¸¦ Çà .

ÀÌ¿ëÇÏ·Á¸é , µ¥ÀÌÅÍ ±¸Á¶¸¦ ½ÇÁ¦ÀÇ ¹®Á¦¿¡ ¸ÂÃß¾î ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

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