二分查找:
思路:
在有序*数组***a[]中查找K
1,不断分割 。
2 用中间值去比较。
====================尝试比较下面两种,得到递归函数的写法=========
【递归版本】
int BinSerch2(int a[], int k ,int left ,int right){
int mid = (left + right) / 2;//1.不断分割
if (left <= right) //递归循环的条件以及出口
{
if (a[mid] == k)//递归的循环体 位于递归之前,所以从由外到里操作
{
return mid;
}
else if (k < a[mid]) //递归的循环
{
BinSerch2(a, k, left, mid - 1);
}
else{//递归的循环
BinSerch2(a, k, mid + 1, right);
}
}
else{
return -1;
}
}
【非递归版本】
循环函数体主要包括两个部分
1、分割
2、3种查找条件判断
//二分查找 在数组a[]中查找K 1,不断分割 。2 用中间值去比较。
int BinSerch1(int a[] ,int k){
int left = 0, right = 11;
while (left <right ) //循环条件
{
int mid = (left + right) / 2;//1.不断分割
if (a[mid] == k)//找到了 查找的三种情况
{
return mid;
}
else if ( k < a[mid]) //
{
right = mid - 1;
}
else{
left = mid + 1;
}
}
return -1;
}