//二分查找
//条件:数组之内的数字必须是顺序的
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
//计算数组长度(元素个数)
//sizeof(arr)计算的是数组总的大小(单位为字节),sizeof(arr[0])是一个元素的大小
int sz = sizeof(arr) / sizeof(arr[0]);
int x = 0;
printf("输入查找的数字:");
scanf("%d",&x);
//查找时候需要一个左右下标确定查找时候的位置
int left=0;
int right=sz-1; //右下标为数组长度减一
//找到时flag为1,没找到为0,初始化时默认没找到
int flag = 0;
while (left <=right)
{
int mid = (left + right) / 2;
//数组中间下标对应的数字比输入的数字大时
//表明从arr[mid]开始的右边数字全部都不是想要查找的数字(因为条件说数组必须是顺序的)
//调整右下标为mid-1
if (arr[mid] > x)
{
right = mid - 1;
}
//数组中间下标对应的数字比输入的数字小时
//表明从arr[mid]开始的左边数字全部都不是想要查找的数字
//调整左下标为mid+1
else if (arr[mid] < x)
{
left = mid + 1;
}
//找到想要查找的数字,令flag为1,并且跳出循环
else
{
printf("找到了,下标为 %d", mid);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("没有找到");
}
return 0;
}
C语言——最简单的二分查找
于 2023-07-21 17:31:50 首次发布