ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. Quick Sort
Quick Á¤·ÄÀº ¹öºíÁ¤·Ä°ú ÇÔ²², °¡Àå ½±°Ô ÀÀ¿ëÇÒ ¼ö ÀÖ´Â Á¤·Ä±â¹ýÀÌ´Ù. Æò±ÕÀûÀ¸·Î O(n log n)¹øÀÇ ºñ±³¸¦ ¼öÇàÇϸç, ÃÖ¾ÇÀÇ °æ¿ì¿¡ O(n^2)ÀÇ ºñ±³¸¦ ¼öÇàÇϵµ·Ï µÇ¾î ÀÖ´Ù.
Á¤·ÄÇÒ µ¥ÀÌÅͰ¡ ÀÌ¹Ì ÁغñµÇ¾î ÀÖÀ¸¸ç, ¸ðµç µ¥ÀÌÅ͸¦ Á¤·ÄÇØ¾ß ÇÒ°æ¿ì °¡Àå ºü¸¥ ¼öÇà¼Óµµ¸¦ º¸¿©ÁÖ´Â ¾Ë°í¸®ÁòÀ¸·Î Æò°¡µÇ°í ÀÖ´Ù.
ÄüÁ¤·ÄÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î ÁøÇàÀÌ µÈ´Ù.
![]()
À§ÀÇ À̹ÌÁö´Â 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]);
}
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|
¾Æ¹«¸® ¶Ù¾î³ Á¤·Ä ¾Ë°í¸®Áò(:12)À» °³¹ßÇÑ´Ù°í ÇÏ´õ¶óµµ, µ¥ÀÌÅÍÀÇ °¹¼ö°¡ NÀ̸é O(NlogN)º¸´Ù ´õ ÁÁÀ» ¼ö
¾ø´Ù´Â °ÍÀÌ Áõ¸íµÇ¾î ÀÖ´Ù.
Áï Á¤·Ä¾Ë°í¸®ÁòÀÇ lower bound´Â O(NlogN)ÀÌ´Ù.
´Ü ÃÖ´ë°ªÀÌ Á¤ÇØÁ® ÀÖ´Â µ¥ÀÌÅͶó¸é counting ¹æ½ÄÀ» ¾µ¼ö ÀÖ°í - counting sort, bucket sort, radix sort - ÀÌ °æ¿ì O(n)ÀÌ º¸ÀåµÉ °ÍÀÌ´Ù.