您的位置:首页 > 其它

二分查找

2016-03-20 21:06 211 查看
【二分查找】前提:在一个已序的空间中查找注意:查找边界条件情况一:左闭右开 【 ),右边界始终无法取到假如前开后闭空间 【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;}假如查找31 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;}假如查找41 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
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息