c语言实现折半查找算法(二分查找),二分查找(折半查找 ):C语言实现代码 + 详细解析...

#includeusing namespace std;

//预先定义全局数组存储序列

int arr[100];

//二分查找函数输入:低位、高位、目标值返回:true/false

bool BSearch(int low,int high,int target)

{

//标志位用于返回函数值,默认为false,查找成功置为true

bool flag = false;

//每次循环都是一次判定

//成功:直接接返回true

//失败:重新确定左右边界

while(low <= high)

{

//mid要求向下取整,在C语言中“/”刚好符合要求

int mid = (low + high)/2;

//成功:mid位置刚好存储目标值

if(target == arr[mid])

{

flag = true;

break;

}

//失败1:目标值在mid左边

else if(target < arr[mid])

{

high = mid - 1;

}

//失败2:目标值在mid右边

else

{

low = mid + 1;

}

}

//至此,flag取值有两种情况

//情况一:查找成功,跳出循环,flag = true

//情况一:查找失败,log(n)次循环,flag = false

return flag;

}

int main()

{

int n;

scanf("%d",&n);

for(int i = 0;i < n;++i)

{

scanf("%d",&arr[i]);

}

int m;

scanf("%d",&m);

//初始化

//low = 数据起始位置

//high = 数据结束位置

int low = 0;

int high = n - 1;

//因为查找m个数据,所以进行m次循环

for(int i = 0;i < m;++i)

{

int target;

scanf("%d",&target);

if(BSearch(low,high,target))

{

printf("YES\n");

}

else

{

printf("NO\n");

}

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值