//正确的算法
template<typename V>
int my_binary_search(vector<V> array, V v)
{
int left=0;
int right=array.size()-1;
int middle;
while (left<=right)//为了使得最后的right能够被判断到。
{
middle=(left+right)/2;
if (array[middle]==v)
{
return middle;
}
else if (array[middle]>v)
{
right=middle-1;
}
else
{
left=middle+1;
}
}
return -1;
}
1. 循环结束标志为left<=right。为了使得最后的right能够被判断到。
//寡人的错误代码
template<typename V>
int my_binary_search(vector<V> array, V v)
{
int left=0;
int right=array.size()-1;
int middle;
while (left<=right)
{
middle=(left+right)/2;
if (array[middle]==v)
{
return middle;
}
else if (array[middle]>v)
{
right=middle-1;
}
else
{
left=middle+1;
}
}
return -1;
}

本文详细介绍了二分查找算法的正确实现方式,并通过对比错误代码帮助读者理解关键细节。重点讲解了循环结束条件的设计,确保算法能正确处理边界情况。

被折叠的 条评论
为什么被折叠?



