PS:主要是看二分查找,二分查找有个前提,数组必须是排好序的,要么从小到大排序,要么从大到小排序;二分查找有两种方法,一个是递归, 一个是while循环,其实本质上都一样。有一个需要注意的点,在第二段代码中有标注
1、 二分查找递归版
///search函数查找目标元素x;
int search(int l, int r, int x)///l左端界限, r右端界限;
{
if(l>r)return 0;
int i = l + (r - l) / 2;
if(a[i]==x)return 1;
else if(a[i]>x)return search(l, i - 1, x);
else return search(i + 1, r, x);
}
2、 while版本
int search(int l, int r, int x)
{
while(l <= r)
{
int i = l + (r - l) / 2;///这么写i仍然等于(r+l)/2, 只不过会避免一些不好的情况;
if(a[i] == x)return 1;//正好找到
if(a[i] < x) l = i + 1;//a【i】小,所以要往大的方向找,改变l的值;
else r = i - 1;//a【i】大,所以要往小的方向找,改变r的值;
}
return 0;
}