C语言二分法查找

题目来源:PTA

有一个有序整型数组array,元素为1,2,5,6,7,12,15,67,88,99,100,200。输入一个元素a,利用二分查找法查找a元素所在的位置。

二分法查找适用于数据量较大时,但是数据需要先排好顺序。
主要思想是:(设查找的数组区间为array[low,high])
算法开始可设置low=0;high=n-1(n为一维数组元素的个数)
(1)确定该区间的中间位置mid
(2)将查找的值a与array[mid]比较。若相等,mid为查找位置;若low>high时,算法结束。
否则确定新的查找区域,继续二分查找。
区域确定如下:array[mid]>a 由数组的有序性可知,a可能在新的区间为array[low,……,mid-1]
array[mid]<a 查找区间为array[mid+1,……,high]。

输入格式:

输入要查找的元素a

输出格式:

如果找到,输出found!、找到的位置和查找的次数,如果没有找到,输出not found!。

输入样例:

在这里给出一组输入。例如:

12

输出样例:

在这里给出相应的输出。例如:

found! 5 1

输入样例:

在这里给出一组输入。例如:

13

输出样例:

在这里给出相应的输出。例如:

not found!
#include<stdio.h>
int main(){
	int array[12]={1,2,5,6,7,12,15,67,88,99,100,200};
	int mid,high=11,low=0,a,i=0;
	scanf("%d",&a);
	do{
		i++;
		mid=(high+low)/2; 
		if(a==array[mid]){ 
		printf("found! %d %d",mid,i);
		break;}//找到后跳出循环 
		else if(a>array[mid])
		low=mid+1;
		else
		high=mid-1;
		if(low>high)
		{
		printf("not found!");
     	} 
	}while(low<high||low==high);//注意端点值 
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值