Quick Sort ¾Ë°í¸®Áò
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Quick Sort

Quick Á¤·ÄÀº ¹öºíÁ¤·Ä°ú ÇÔ²², °¡Àå ½±°Ô ÀÀ¿ëÇÒ ¼ö ÀÖ´Â Á¤·Ä±â¹ýÀÌ´Ù. Æò±ÕÀûÀ¸·Î O(n log n)¹øÀÇ ºñ±³¸¦ ¼öÇàÇϸç, ÃÖ¾ÇÀÇ °æ¿ì¿¡ O(n^2)ÀÇ ºñ±³¸¦ ¼öÇàÇϵµ·Ï µÇ¾î ÀÖ´Ù.

Á¤·ÄÇÒ µ¥ÀÌÅͰ¡ ÀÌ¹Ì ÁغñµÇ¾î ÀÖÀ¸¸ç, ¸ðµç µ¥ÀÌÅ͸¦ Á¤·ÄÇØ¾ß ÇÒ°æ¿ì °¡Àå ºü¸¥ ¼öÇà¼Óµµ¸¦ º¸¿©ÁÖ´Â ¾Ë°í¸®ÁòÀ¸·Î Æò°¡µÇ°í ÀÖ´Ù.
¼ÒƮȿÀ²
°¡Àå ºñÈ¿À²ÀûÀÎ '''¹öºí¼ÒÆ®'''´Â O(N^2)À̰í, Äü¼ÒÆ®´Â Æò±Õ O(NlogN)ÀÌ´Ù.
¾Æ¹«¸® ¶Ù¾î³­ Á¤·Ä ¾Ë°í¸®Áò(:12)À» °³¹ßÇÑ´Ù°í ÇÏ´õ¶óµµ, µ¥ÀÌÅÍÀÇ °¹¼ö°¡ NÀ̸é O(NlogN)º¸´Ù ´õ ÁÁÀ» ¼ö
¾ø´Ù´Â °ÍÀÌ Áõ¸íµÇ¾î ÀÖ´Ù.

Áï Á¤·Ä¾Ë°í¸®ÁòÀÇ lower bound´Â O(NlogN)ÀÌ´Ù.

´Ü ÃÖ´ë°ªÀÌ Á¤ÇØÁ® ÀÖ´Â µ¥ÀÌÅͶó¸é counting ¹æ½ÄÀ» ¾µ¼ö ÀÖ°í - counting sort, bucket sort, radix sort - ÀÌ °æ¿ì O(n)ÀÌ º¸ÀåµÉ °ÍÀÌ´Ù.

ÄüÁ¤·ÄÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î ÁøÇàÀÌ µÈ´Ù.
  1. ÁÖ¾îÁø µ¥ÀÌÅÍ ¸ñ·Ï¿¡¼­ ÀÓÀÇÀÇ ¿ø¼Ò¸¦ °í¸¥´Ù. ÀÌ ¿ø¼Ò¸¦ ÇǺ¿À̶ó ÇÑ´Ù.
  2. ÇǺ¿À» ±âÁØÀ¸·Î ÇǺ¿ÀÇ ¾Õ¿¡´Â ÇǺ¿º¸´Ù ÀÛÀº ¼ýÀÚ°¡ ¿Àµµ·Ï Çϰí, ÇǺ¿ µÚ¿¡´Â ÇǺ¿º¸´Ù Å« ¿ø¼Ò°¡ ¿Àµµ·ÏÇÑ´Ù. ÇÊ¿äÇÒ °æ¿ì ÇǺ¿Àº ¿òÁöÀÏ ¼ö ÀÖ´Ù.
ºÐÇÒ°úÁ¤À» °ÅÄ¡°Ô µÊÀ» ¾Ë ¼ö ÀÖ´Ù. ºÐÇÒÀÌ ³¡³­µÚ¿¡ ÇǺ¿Àº ´õ ÀÌ»ó ¿òÁ÷ÀÏ Çʿ䰡 ¾øÀÌ ±× ÀÚ¸®¿¡ °íÁ¤µÈ´Ù. ÈçÈ÷ ºÐÇÒÁ¤º¹¾Ë°í¸®ÁòÀ̶ó°í ÇÑ´Ù. Äü¼ÒÆ®´Â ºÐÇÒÁ¤º¹¹æ½ÄÀ» ¾²´Â Á¤·Ä¾Ë°í¸®ÁòÀ̶ó°í ´Þ¸® ºÎ¸¦ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  1. 1,2ÀÇ °úÁ¤À» Àç±Í¼öÇàÇÑ´Ù. ÇѹøÀÇ ÇǺ¿ÀÌ ¼±ÅõǾ ºÐÇÒÀÌ ÀÌ·ç¾îÁú ¶§¸¶´Ù. ¹Ýµå½Ã °íÁ¤µÇ´Â °ªÀÌ »ý¼ºÀÌ µÇ¹Ç·Î, ÀÌ ¾Ë°í¸®ÁòÀº ¹Ýµå½Ã ³¡³­´Ù´Â °ÍÀ» º¸ÀåÇÒ ¼ö ÀÖ´Ù.

Sorting_quicksort_anim.gif

À§ÀÇ À̹ÌÁö´Â Quick Sort°¡ ÀÌ·ç¾îÁö´Â °úÁ¤À» ³ªÅ¸³»°í ÀÖ´Ù. Á»´õ ½¬¿î ÀÌÇØ¸¦ ¿øÇÑ´Ù¸é Visual Sort¹®¼­¸¦ º¸±â ¹Ù¶õ´Ù.

À§ÀÇ ÇÁ·Î¼¼½º°¡ Äü¼ÒÆ® ¾Ë°í¸®ÁòÀÇ ÇÙ½ÉÀ¸·Î ¸Ó¸®¼ÓÀ¸·Î ÀÌÇØÇß´Ù¸é, ±¸ÇöÇÏ´Â °Íµµ ±×¸® ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ±¸Çö¿¡µµ ¸î°¡Áö ¹æ¹ýÀÌ Àִµ¥, ±× Áß¿¡¼­ º°µµÀÇ ¹öÆÛ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ³»ºÎºÐÇÒ Äü¼ÒÆ®°¡ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. ÀÌ ¹æ¹ýÀº Á¤·ÄÀ» À§ÇÑ ÀӽùöÆÛ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ¸¹Ç·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí À¯ÁöÇϱâ À§ÇÑ ºñ¿ëÀ» °í·ÁÇÒ Çʿ䰡 ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

´ÙÀ½Àº C·Î ÀÛ¼ºµÈ ÄüÁ¤·Ä ¾Ë°í¸®ÁòÀÌ´Ù.
void quickSort(int numbers[], int array_size); 
void q_sort(int numbers[], int left, int right); 
 
void quickSort(int numbers[], int array_size) 
{ 
    q_sort(numbers, 0, array_size -1); 
} 
 
void q_sort(int numbers[], int left, int right) 
{ 
    int pivot, l_hold, r_hold; 
    l_hold = left; 
    r_hold = right; 
    pivot = numbers[left]; // 0¹øÂ° ¿ø¼Ò¸¦ ÇǺ¿À¸·Î ¼±Åà 
    while (left < right) 
    { 
        // °ªÀÌ ¼±ÅÃÇÑ ÇǺ¿°ú °°°Å³ª Å©´Ù¸é, À̵¿ÇÒ Çʿ䰡 ¾ø´Ù 
        while ((numbers[right] >= pivot) && (left < right)) 
            right --; 
 
        // ±×·¸Áö ¾Ê°í °ªÀÌ ÇǺ¿º¸´Ù ÀÛ´Ù¸é, 
        // ÇǺ¿ÀÇ À§Ä¡¿¡ ÇöÀç °ªÀ» ³Ö´Â´Ù. 
        if (left != right) 
        { 
             numbers[left] = numbers[right]; 
        } 
        // ¿ÞÂʺÎÅÍ ÇöÀç À§Ä¡±îÁö °ªÀ» ÀоîµéÀ̸鼭 
        // ÇǺ¿º¸´Ù Å« °ªÀÌ ÀÖ´Ù¸é, °ªÀ» À̵¿ÇÑ´Ù. 
        while ((numbers[left] <= pivot) && (left < right)) 
            left ++; 
        if (left != right) 
        { 
             numbers[right] = numbers[left]; 
             right --; 
        } 
    } 
    // ¸ðµç ½ºÄµÀÌ ³¡³µ´Ù¸é, ÇǺ¿°ªÀ» ÇöÀç À§Ä¡¿¡ ÀÔ·ÂÇÑ´Ù. 
    // ÀÌÁ¦ ÇǺ¿À» ±âÁØÀ¸·Î ¿ÞÂÊ¿¡´Â ÇǺ¿º¸´Ù À۰ųª °°Àº °ª¸¸ ³²¾Ò´Ù. 
    numbers[left] = pivot; 
    pivot = left; 
    left = l_hold; 
    right = r_hold; 
 
    // Àç±ÍÈ£ÃâÀ» ¼öÇàÇÑ´Ù. 
    if (left < pivot) 
        q_sort(numbers, left, pivot - 1); 
    if (right > pivot) 
        q_sort(numbers, pivot+1, right); 
} 
 
int main(int argc, char **argv) 
{ 
    int data[] = {3,7,8,5,2,1,9,5,4}; 
    int i; 
    quickSort(data, 9); 
    for (i =0; i < 9; i++) 
    { 
        printf("%d\n", data[i]); 
    } 
} 
 

´ÙÀ½Àº ÄüÁ¤¸¦À» ÀÌÇØÇϱ⠽±°Ô º¸¿©ÁÖ°í ÀÖ´Ù. Ãâó : [http]¼¼»ó, ±× Áß½ÉÀÇ ³ª!! blog

category_Database
category__3
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.