//二分查找
int efcz(int[] a, int goal, out int k)
{
int time1
= 0;
//检测初始时不变式的真值
if
(a.Length == 0)
{
k = 0;
return -1;
}
//准备循环
int l =
0;//数组左端下标
int r =
a.Length - 1;//数组右端下标
int m;
//数组中间下标
//循环开始
while (r
>= l)//r>=l就是不变式,代表数组中有元素
{
time1++;
m = (r + l) / 2; //计算中间位置
if (a[m] == goal)
//分支1,中间元素是目标元素
{
k = time1;
return m;
//则返回
}
else if (a[m] > goal)
//分支2,中间元素大于目标元素
{
r = m - 1;
//把数组右端标志放到m的前面一个元素
}
else
//分支3,中间元素小于目标元素
{
l = m + 1;//把数组左端标志放到m的后面一个元素
}
}
k =
time1;
return -1;
//运行到这里表示没有找到目标元素
}