在一个有序数组中查找一个具体的数
举例:在下面的数中查找7
1 2 3 4 5 6 7 8 9 10
可以看出1的下标为0,10的下标为9就可以找到中间元素的下标
(0+9)9/2=4(下标为4的数数为5,因为我们要找7,1-5的数比7小直接不看,看6的下标5)被查找的范围只剩下6 7 8 9 10
|
(5+9)14/2=7(下标为7的数是8,我们找7,8比7大所以8-10的数不看,看6)被查找的范围只剩下6 7
(5+6)11/2=5(下标为5的数是6,包括6和6后面的数不看可以得到7)
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
int sz = sizeof(arr) / sizeof(arr[0]);
int a = 0, b = sz - 1;
int n;
printf("请输入要找的数:");
scanf("%d", &n);
while (a <= b)
{
int mid = (a + b) / 2;
if (arr[mid] < n)
{
a = mid + 1;
}
else if (arr[mid] > n)
{
b = mid - 1;
}
else
{
printf("该数是数组中第%d个元素的值", mid+1);
return 0;
}
}
printf("无此数");
}