#include <stdio.h>
int BinarySearch(int* Nums, int Size, int Left, int Right, int Target);
void test(void);
int main()
{
test();
return 0;
}
void test(void) {
int a[10] = { 3,7,14,17,17,23,27,29,45,67 };
int find=BinarySearch(a, 10, 0, 9, 23);
printf("%d\n", find);
find = BinarySearch(a, 10, 0, 9, 3);
printf("%d\n", find);
find = BinarySearch(a, 10, 0, 9, 67);
printf("%d\n", find);
}
int BinarySearch(int* Nums, int Size, int Left, int Right, int Target) {
int L = Left; int R= Right;
while (L<=R)
{
int mid = (L + R) / 2;
if (Nums[mid] == Target)
return mid;
else if (Nums[mid] > Target) {
R=mid-1;
}
else {
L=mid+1;
}
}
if (L > R)return -1;
}
運(yùn)行結(jié)果:image.png
容易錯(cuò)的地方,R=mid-1,L=mid+1
假設(shè)有個(gè)數(shù)組a[3,5,7],查找7厕吉;第一次L=0,R=2,mid=1,a[1]=5有咨,5<7;
第二次查找琐簇,如果讓L=mid=1,在[5,7]內(nèi)查找,那這次的mid=(1+2)/2=1,就會(huì)找不到
循環(huán)條件為什么是L<=R,二分查找分到最后可能會(huì)剩一個(gè)元素座享,這時(shí) L=R;
如果最后那次(L=R)循環(huán)還沒找到婉商,不管R=mid-1還是L=mid+1(這里的mid=L=R),都會(huì)讓L>R渣叛,返回-1表示沒有找到