1.我们在玩猜数字游戏时,如1-100,通常会选择先猜50,如果大了,接下来便是25,如果小了,就猜75,这种方法就叫做二分法。二分法能节省大量步骤。
2.二分法只能在有序数上使用,这是因为二分法通过下标来比较,而数组的下标,由0开始依次增加,如果数组无序那么可能会造成a>b 但是 a的下标却小于b,这样就得不到正确答案。
3.二分法代码如下
int main()
{
int a, b, c;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
a = 0;
int l = sizeof(arr) / sizeof(arr[0]);
b = l-1;
int d = 0;
while (a <= b)
{
c = (a + b) / 2;
if (arr[c] == 7)
{
printf("找到了,下标是%d", a); d = 1;
break;
}
else if (arr[c] < 7)
{
a = c + 1;
}
else
{
b = c - 1;
}
}
if (d == 0)
{
printf("找不到");
}
return 0;
4.想找到中间数,可以让数组首位下标加上末位下标/2,那么首位下标大家都知道是0,末位怎么得到呢? 我们可以使用sizeof函数计算出数组字节长度,再除以一个字节,可以得到字符的个数,但由于下标从0开始,所以末位=字符个数-1.
5当第一次判断后,我们的中间数则需要改变了,此时如果判断为大了,则要找的数在中间数左侧,所以a不用变,而b变成c-1即可,若判断为小了,则b不变a+1.
接下来使用循环重复以上步骤,直至找到要找的数。
二分法介绍到此为止,感谢观看。。。。。