概念
什么是二分查找呢?
二分查找
:在有序数组中查找某一特定元素的搜索算法。
二分查找又称折半查找,通过将数组折半,用中间值和查找值作比较,多次使用,直到找到要查找的值。
注意
:二分查找的前提是,数组必须是要有序的。
二分查找
int main()
{
int arr[5] = { 1,2,3,4,5 };
int begin = 0;
int end = 4;
int x = 2;
int mid = 0;
while (begin <= end)
{
mid = begin + ((end - begin) >> 1);
if (arr[mid] > x)
end = mid - 1;
else if (arr[mid] < x)
begin = mid + 1;
else
break;
}
printf("下标是%d\n", mid);
return 0;
}
区间问题
1.需要注意的是,以上的代码是用的闭区间,保持左闭右开的区间,即(begin=0,end=4)
但是还有一种是左闭右开的区间(begin=0,end=5)
。
那么我们接下来讲一讲左闭右开的区间
int main()
{
int arr[5] = { 1,2,3,4,5 };
int begin = 0;
int end = 5;
int x = 2;
int mid = 0;
while (begin < end)//这里是小于,不是小于等于
{
mid = begin + ((end - begin) >> 1);
if (arr[mid] > x)
end = mid;//这里不会减一了
else if (arr[mid] < x)
begin = mid + 1;
else
break;
}
printf("下标是%d\n", mid);
return 0;
}
代码的不同,我已经标注出来了
如果我们继续使用end=mid-1
的话,看一看会有什么效果。
因此,我们在使用二分查找的时候,需要注意它的区间和循环条件。