您的位置:首页 > 其它

二分搜索算法

2012-09-21 18:58 288 查看
二分搜索算法是运用分治策略的典型例子。

二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x做比较。如果x = a[n/2],
则找到x, 算法终止; 如果 x < a[n / 2], 则只要在数组a的左半边继续搜索x; 如果x > a[n / 2], 则只要
在数组的右半边继续搜索x。

具体算法描叙如下:

template <class Type>
int BinarySearch(Type a[], const Type &x, int n)
{
//在a[0] <= a[1] <= ... <= a[n -1]中搜索x
//找到x时返回其在数组中的位置,否则返回 -1
int left = 0;
int 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;  //未找到x
}


容易看出,每执行一次算法的while循环,待搜索的数组大小缩小一半。因此,在最坏的情况下,
while循环被执行了O(logn)次。循环体内运算时间O(1)时间,因此整个算法在最坏的情况下的计算
时间复杂性为O(logn)。

注:以上内容整理自《计算机算法设计与分析》(第三版)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: