C/C++ 筆試面試(2)——二分尋找

來源:互聯網
上載者:User

Bentley在他的著作《Writing Correct Programs》中寫道,90%的電腦專家不能在2小時內寫出完全正確的二分搜尋演算法。

難怪有人說,二分尋找原理簡單,甚至小學生都能明白。不過這尋找演算法好多專家都寫不好。我自己嘗試了一下,確實要第一次就完全寫正確不容易.以下兩份實現依次為迭代和遞迴版本的代碼,二分尋找的思想很多人都清楚,但是這裡有一個細節就是要注意邊界的選擇。

//迭代方法int search(int array[], int n, int v){    int left, right, middle;    left = 0, right = n - 1;    while (left <= right)    {        middle = (left + right) / 2;        if (array[middle] > v)        {            right = middle - 1;        }        else if (array[middle] < v)        {            left = middle + 1;        }        else        {            return middle;        }    }    return -1;}//遞迴方法int search_recurse(int array[], int low, int high, int v){    int middle;    middle = (low + high) / 2;    if (low < high)    {        if (array[middle] > v)        {            return search_recurse(array, low, middle, v);        }        else if (array[middle] < v)        {            return search_recurse(array, middle + 1, high, v);        }        else        {            return middle;        }    }    else if (low == high)    {        if (array[middle] == v)        {            return middle;        }        else        {            return -1;        }    }    else    {        return -1;    }    return -1;}int main(){    int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 13, 19};    int m = search(array, sizeof(array)/sizeof(array[0]), 13);    printf("m = %d\n", m);    m = search_recurse(array, 0, sizeof(array)/sizeof(array[0]), 13);    printf("m = %d\n", m);    return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.