二分搜索算法

题目描述

给定已按升序排好序的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) 。

posted @ 2015-05-16 09:47  枯桃  阅读(3235)  评论(0编辑  收藏  举报