您的位置:首页 > 其它

二分查找算法

2016-05-17 12:28 387 查看

二分查找法:

二分查找法主要是解决在“一堆数中找出指定的数”这类问题。

而想要应用二分查找法,这“一堆数”必须有一下特征:

存储在数组中

有序排列

所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?)

至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。

算法图解:



递归实现:

template <typename T>
int BinarySearch(const T* arr, int start, int end, const T& value)
{
if (start<=end)
{
int middle = (end - start) / 2 + start;
if (arr[middle] < value)
{
start = middle + 1;
return BinarySearch(arr, start, end, value);
}
else if (arr[middle] > value)
{
end = middle - 1;
return BinarySearch(arr, start, end, value);
}
else
return middle;
}
return -1;
}


非递归实现:

template <typename T>
int BinarySearchWhithoutRecursion(const T* arr, int start, int end, const T& value)
{
int middle;
while (start <= end)
{
middle = (end - start) / 2 + start;
if (arr[middle]>value)
end = middle - 1;
else if (arr[middle] < value)
start = middle + 1;
else
return middle;
}
return -1;
}


这个是我自己对二分查找应用的一些总结:

/article/11862924.html

这博客讲解二分查找非常详细:

/content/4175985.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: