#include<stdio.h>
#include<math.h>
本方法适用于按大小次序排列的数组
在使用二分法进行查找时,由于整除算法的向下取整特性,所以不用担心数组的奇偶项数不同而影响结果,例如四个数,想要查找第二位,(3+0)*0.5=1.5,取整后mid=1;或者查找第三位,修正后down=1,up=3,mid修正为2
但是这种方法的循环结束条件为up==down+1.所以无法检索第一项和最后一项,所以要单独列出这种情况
int main()
{
int a[]={1,3,5,8,10,16,18,19,20}, mid, up = 8, down = 0,serch;
printf("请输入想要查找的数:");
scanf_s("%d",&serch);
do
{
mid = (down + up) / 2;
if(a[down]==serch)
{
printf("待查找的数在数组的第1位");
break;
}
if(a[up]==serch)
{
printf("待查找的数在数组的第%d位", up + 1);
break;
}
if (a[mid] == serch)
{
printf("待查找的数在数组的第%d位", mid+1);
break;
}
if (a[mid] > serch)
{
up = mid;
}
if (a[mid] < serch)
{
down = mid;
} //这两步修正变量不能退出循环
if(down+1==up)
{
printf("数组中无此数");
break;
}
} while (1);
return 0;
}