2ºÐ Ž»ö


ÇÔ¼ö¸í
binarySearch  2ºÐ Ž»ö
Çü½Ä
int binarySearch(DATA *data, int nmem, int target);
Àμö
typedef struct {
    int key;        /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
    int info;       /* ±× ¿ÜÀÇ Çʵå */
} DATA;

data    (ÀÔ·Â) µ¥ÀÌÅÍ ·¹ÄÚµåÀÇ ¹è¿­
nmem    (ÀÔ·Â) ·¹ÄÚµå ¹è¿­ÀÇ Å©±â
target  (ÀÔ·Â) Ž»ö ¸ñÇ¥·Î ÇÏ´Â Å°ÀÇ °ª
ÇÔ¼öÄ¡
¹ß°ßµÇ¾úÀ» °æ¿ì´Â ¹è¿­ÀÇ ¿ä¼Ò ¹øÈ£(¹è¿­ÀÇ ¼±µÎ ¿ä¼ÒÀÇ ¹øÈ£´Â 0).
¹ß°ßµÇÁö ¾Ê¾Ò´ø °æ¿ì´Â -1.
ÁÖÀÇ »çÇ×
µ¥ÀÌÅÍ ·¹ÄÚµåÀÇ Å° µ¥ÀÌÅÍ°¡ ½Â¼ø¿¡ ¿Ã¹Ù¸£°í ¼ÒÆ® µÇ°í ÀÖ´Â °ÍÀÌ ÀüÁ¦ Á¶°ÇÀÌ´Ù.

¿ë·Ê(binarySearch-test.c )

ÇÁ·Î±×·¥(binarySearch.c )
int binarySearch(DATA *data, int nmem, int target){
    int left, right, middle;

    left = 0;
    right = nmem - 1;
    while (left < right) {
        middle = (left + right) / 2;
        if ((data + middle)->key < target) left = middle + 1;
        else right = middle;
    }
    if ((data + left)->key == target) 
        return left;
    return -1;
}
¼³¸í
¹è¿­ ¶Ç´Â ¸®½ºÆ®¿¡ ´Ã¾î³õÀ» ¼ö ÀÖ¾ú´ø µ¥ÀÌÅÍ°¡ ¼ÒÆ® µÇ°í ÀÖ´Â °æ¿ì¿¡´Â, º»2ºÐ Ž»ö¹ýÀ» »ç¿ëÇϸé(ÀÚ) Ž»ö ½Ã°£À» Å«ÆøÀ¸·Î ÁÙÀÏ ¼ö°¡ ÀÖ´Ù. ±×°ÍÀº, µ¥ Ÿ Àüü¸¦ 2°³ÀÇ ±×·ìÀ¸·Î ³ª´©¾î, ã´Â Å°°¡ ¾î´À ±×·ì¿¡ ¼ÓÇÏ°í ÀÖ°í ÀÎÁö¸¦ ÆÇÁ¤ÇØ, ¼ÓÇÏ°í ÀÖ´Â ºÎºÐÀ» ´õ¿í 2°³(»ì)ÀÇ ÀÛÀº ±×·ìÀ¸·Î ³ª´©¾î À¶Åë µ¹·ÁÁÖ¾î Á¶»çÇØ °¡´Â ¹æ¹ýÀÌ´Ù.

1ȸÀÇ ºñ±³·Î Ž»öÇØ¾ß ÇÒ ¹üÀ§´Â ¹ÝÀÌ µÇ¹Ç·Î, Ž»ö ¼º°ø ȤÀº ½ÇÆÐÀÇ ¾î´À ÂÊÀÇ °æ¿ì¿¡¼­µµ, °è»ê·®Àº O(log n)ÀÌ´Ù.

µ¥ÀÌÅÍ°¡ ³»¸²Â÷¼øÀ¸·Î ¼ÒÆ® µÇ°í ÀÖ´Â °æ¿ì´Â, ºÎµîÈ£ÀÇ ¹æÇâÀ» º¯Çϸé ÁÁ´Ù.

°ü·Ã ÇÔ¼ö
¼±Çü Ž»ö, ÀÚü Á¶Á÷È­ Ž»ö, 2ºÐ Ž»ö³ª¹«, AVL³ª¹«, B³ª¹«