二分搜索需要注意开闭区间的问题,限制条件和边界要保持配对:low<=high , low = mid +1 ,high = mid-1。
二分搜索的模板如下:
&nb
二分搜索的模板如下:
// 二分搜索
int BinarySearch(int *num, int key, int low, int high)
{
int mid ;
while(low <= high) //切记:条件是 <= ,很多次都不小心写成了 < ,导致了N多WA
{
mid = (low + high)>>1;
if(num[mid] == key)
return mid;
else if(num[mid] < key)
low = mid + 1;
else
high = mid -1;
}
return low; //查找不成功时,返回应该插入的位置,或者直接返回-1,表示查找失败也是可以的
}
二分搜索的扩展:对已排好序的数组A,一般来说可用二分查找 可以很快找到。现有一特殊数组A[],它是循环递增的,如A[]={ 17 19 20 25 1 4 7 9},试在这样的数组中找一元素x,看看是否存在。请写出你的算法,必要时可写伪代码,并分析其空间、时间复杂度。
&nb

本文探讨了如何在循环递增的数组中应用二分搜索算法,包括普通二分搜索及其在循环递增数组中的扩展。通过分析数组特性和元素之间的关系,提出了改进的二分搜索算法,降低了时间复杂度,提高了搜索效率。
最低0.47元/天 解锁文章
57

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



