折一半,取边界,大小变
1.输入一个数与中数比,折去一半
2.如果比中数大,则该数为最小值,反之为最大值
3.循环反复,最后得到一个值与输入值相同,可得下标
例子:
n=18 mid=7 a[7]=16
18>16 low=8 mid=12 a[12]=68
68>18 high=11 mid=9 a[9]=58
58>18 high=8 mid=8 a[8]=18
#include<stdio.h>
int main()
{
int a[15] = { 1,2,3,4,8,9,12,16,18,58,59,61,68,69,77 };
int low=0,high=15,n,mid;
scanf("%d", &n);
while (low <= high)
{
mid = (low+high) / 2;
if (n < a[mid])
{
high =mid-1;
}
if (n > a[mid])
{
low = mid + 1;
}
if (n == a[mid])
{
printf("%d,%d",n, mid);
break;
}
}
if (n != a[mid])
{
printf("无");
}
return 0;
}