// 地址空间从0开始到8000结束 步长为8
int position = 8000;
int number = int.Parse(txtNumber.Text);
int[] numbers = new int[position];
for(int i=0;i<position;i++)
{
numbers[i] = i;
}
int offset = 8;
long low = 0;
long high = position - offset;
long mid = 0;
string sign = "没有找到";
while(low <= high)
{
mid = (low + high)/2;
if (mid % 2 != 0) //这边不能为步长//步长为1的时候不需要这个
{
mid = (low + high - offset)/2;//减一个步长肯定是合适的.
}
if (numbers[mid] == number)
{
sign = mid.ToString() + "找到:";
break;
}
if (numbers[mid] > number)
{
high = mid - offset;
}
if (numbers[mid] < number)
{
low = mid + offset;
}
}
txtHTML.Text = sign;
//另一种方法
long position;
long low = 0;
long high = 5000;//表示有多少个这样步长,如果是地址应该是 5000*8
long mid = 0;
int offset = 8;
string sign = "没有找到";
while(low <= high)
{
mid = (low + high)/2;
if (numbers[mid] == number)
{
int find = (mid * offset) + position;
sign = find.ToString();
break;
}
if (numbers[mid] > number)
{
high = (mid - 1) * offset + position;
}
if (numbers[mid] < number)
{
low = (mid + 1) * offset + position;
}
}
txtHTML.Text = sign;


浙公网安备 33010602011771号