概念
什么是二分查找呢?
二分查找
:在有序数组中查找某一特定元素的搜索算法。
二分查找又称折半查找,通过将数组折半,用中间值和查找值作比较,多次使用,直到找到要查找的值。
注意
:二分查找的前提是,数组必须是要有序的。
二分查找
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;elsebreak;}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;elsebreak;}printf("下标是%d\n", mid);return 0;
}
代码的不同,我已经标注出来了
如果我们继续使用end=mid-1
的话,看一看会有什么效果。
因此,我们在使用二分查找的时候,需要注意它的区间和循环条件。