二分搜索算法


題目描述

給定已按升序排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定元素x。

題目分析

二分搜索算法(折半查找法)是運用分治策略的典型例子。

滿足分治法的4個適用條件。很顯然此問題分解出的子問題相互獨立,即在a[i]的前面或后面查找x是獨立的子問題,因此滿足分治法的第四個適用條件。

算法實現

#include <stdio.h>

int binarySearch(int a[], const int& x, int n)
{
    int left=0, right=n-1;
    while (left <= right)
    {
        int middle = (left+right)/2;
        if (x==a[middle])
        {
            return middle;
        }
        if (x > a[middle]) 
        {
            left = middle+1;
        }
        else
        {
            right = middle-1;
        }
    }
    return -1;
}

int main()
{
    int a[] = {1,2,5,7,8,10};
    printf("%d\n",binarySearch(a,8,6));
    return 0;
}

復雜度分析

每執行一次算法的while循環, 待搜索數組的大小減少一半。因此,在最壞情況下,while循環被執行了O(logn) 次。循環體內運算需要O(1) 時間,因此整個算法在最壞情況下的計算時間復雜性為O(logn) 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM