//#B站鹏哥7-7-0s
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//找7
int sz = sizeof(arr) / sizeof(arr[0]);//个数
int left = 0;//左下标
int right = sz - 1;//右下标
while (left <= right)//程序思想是建立在left<=right基础上
{
int mid = (left + right) / 2;//计算每次变化的中值
if (arr[mid] > k)//arr[mid] 示意mid对应找到的数
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}//刨除=中值的情况,就有了mid-1和mid+1
else
{
printf("找到了下标是:%d", mid);
break;
}//这说的就是arr[mid]下标对应的数正好和要找的数相等了
//就算找到了
}
if (left > right)
printf("找不到");
}
//log2^10=3.4,如例找了3次
以下是函数法
//B站鹏哥9-1-6.0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int binary_search(int arr[], int k,int sz)//再写函数体具体怎么实现去
{
int left = 0;
int right = sz - 1;
while (left <=right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;//找到了
}
}return -1;
}
int main()//先写整个函数流程
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, k,sz);
if (ret == -1)
{
printf("找不到指定数字");
}
else
{
printf("找到了下标是%d\n", ret);
}
}