标签:数组边界 二分查找
【二分查找】
前提:在一个已序的空间中查找
注意:查找边界条件
情况一:左闭右开 【 ),右边界始终无法取到
假如前开后闭空间 【left,right),比如int array[10]={0,1,2,3,4,5,6,7,8,9};【0,10)
int BinarySearch (int a[],int size,int data)
{
int left=0;
int right=size;
int mid=0;
while(left<right)//注意此处不能去等号
{
mid=left + (right-left)/2;
if(data<a[mid])
{
right=mid;
}
else if(data>a[mid])
{
left=mid+1;
}
else
{
return mid;
}
}
return -1;
}
假如查找3
1 2 3 4 5 6 7 8 9
第一次 【1,9) mid=4 a[4]>3 缩小右边界 [0,4)
即直接right=mid;
第二次 【0,4) mid=2 a[2]==3 退出
假如找9
第一次 【0,9) mid=4 a[4]<9 改变左边界[5,9)
第二次 【5,9)mid=9 a[7]<9 改变左边界[8,9)
第三次 【8,9)mid=8 a[8]==9 退出
情况二:左闭右闭 右边界可以取到
假如前开后闭空间 【left,right】,比如int array[10]={0,1,2,3,4,5,6,7,8,9};【0,9】
int BinarySearch (int a[],int size,int data)
{
int left=0;
int right=size;
int mid=0;
while(left<right)//注意必须加=号,比如查找最后一个元素
{
mid=left + (right-left)/2;
if(data<a[mid])
{
right=mid-1;
}
else if(data>a[mid])
{
left=mid+1;
}
else
{
return mid;
}
}
return -1;
}
假如查找4
1 2 3 4 5 6 7 8 9
第一次 [0,8] mid =4 a[4]>4 缩小右边界[0,3]
第二次 [0,3] mid =1 a[1]<4 改变左边界[2,3]
第三次 [2,3] mid=2 a[2]<4 改变左边界[3,3]
第四次 [3,3] mid=3
标签:数组边界 二分查找
原文地址:http://11285984.blog.51cto.com/11275984/1753251