今天学了二分查找,第一种循环
int ef(int a[], int n, int t)
{
int l = 0; int r = n - 1;//左端从0开始,右端从数组长度-1开始
while (l<=r)
{
int m = l + (r - l) / 2;//取中间数
if (a[m] > t)r = m - 1;//中间数大于目标,右端改变
else if (a[m] < t)l = m + 1;//中间数小于目标,左端改变
else return m;//返回找到的数的位置
}
return -1;
}
第二种递归
int ef2(int a[], int l, int r,int t)
{
int m = l + (r - l) / 2;
if (l > r)return -1;//左端大于右端终止递归
if (a[m] > t)return ef2(a, l, m - 1, t);
else if (a[m] < t)return ef2(a, m + 1, r, t);
else return m;
}