C语言二分法查找

#include <stdio.h>
#include <math.h>
void main()
{int high,low,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&k);
while (high>low)
{m=(high+low)/2;
if(k<m) high=m-1;
else if(k>m) low=m+1;
else m=(high+low)/2;}
printf("yes");
return;
if (k!=a[m])
{printf("no");
return;}
}
能运行,但是如果输入11不对。。。错哪了?

#include <stdio.h>//不用math头文件

void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",&k);
while (high>=low)//>=
{
m=(high+low)/2;
if(k<a[m]) high=m-1;//比较的是数值而不是下标
else if(k>a[m]) low=m+1;
else
{
printf("yes");
return;//这两句地方放错了
}
}

printf("no");
return;//if语句去掉
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-07-31
二分法查找又称折半查字法;
思路是.恩!
举例吧0,1,2,3,4,5,6,7,8中找5取数组中的一半也就是地五个4与5比较,如果4>5(就是中间的那个数比要找的那个大,那么就取那个数之前的那部分);如果4<5(就是中间的那个数比要找的那个小,就取那个数只后的那部分);如此循环下去;
不好意思,语文没学好,表达不清楚
第2个回答  2011-09-08
#include <stdio.h>
#include <math.h>
void main()
{
int high,low,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&k);
high=9, low=0;//初值不能忘
while (high>=low)//条件是>=
{
m=(high + low)/2;
if(k<a[m]) high=m-1;
else if(k>a[m]) low=m+1;
else break; //找到则退出循环
}

if (k!=a[m])
{
printf("no\n");
return;
}
else
{
printf("yes\n");
return;
}
}
第3个回答  2011-09-08
high,low都没有赋值。
第4个回答  2011-09-08
if(k<m)二分查找怎么会和序号比较,应当是和数组里的数比较吧

C语言 二分法查找次数公式怎么推导?
对具有n个元素的有序数组进行二分法查找,要分析的比较次数,可以使用画二叉判定树的方法来分析。该二叉判定树的高度为[log2(n)]+1层,此即为二分查找的最多比较次数,比如:n=1000,则最多比较[log2(1000)]+1=9+1=10次。如果要计算平均的比较次数,则需要对二叉判定树中的每个节点进行分析,...

c语言 最快的查找方式
1、最快的查找方式是:二分法查找。2、查找的线性表分:无序线性表、有序线性表、分块有序线性表。3、对无序线性表只能采用顺序查找,顺序查找的平均比较次数为(n+1)\/2 4、对有序线性表可以采用二分查找,二分查找的比较次数为log2n 5、对分块有序线性表可以采用分块法查找。C语言是一种计算...

C语言实现二分法求解方程在区间内的根
C语言利用二分法策略寻找非线性方程在给定区间内的唯一实根。这种方法的关键在于,对于连续函数[公式],假设其在[a, b]区间内仅有一个实根,通过不断将区间对半分割,直至找到函数值符号变化的位置,从而确定根的确切位置。二分法的具体步骤是:首先,将区间[a, b]分为两部分,取中点[公式],计算函数...

C语言用二分法查找关键字
如果在指定子数组中还没有查找到关键字,就再把子数组折半,反复进行这种查找,直到要查找的关键字等于子数组中间的元素,或没有找到关键字为止。在最坏的情况下,用二分法查找有1024个元素的数组也只需要比较10次,即用2除1024,连续除10次得到1为止,如果有1048576(2的20次方)个元素,用二分法只要...

C语言二分法查找
void main(){int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};\/\/hing和low赋初值 scanf("%d",&k);while (high>=low)\/\/>= { m=(high+low)\/2;if(ka[m]) low=m+1;else { printf("yes");return;\/\/这两句地方放错了 } } printf("no");return;\/\/if语...

C语言中二分法的具体程序是什么呢?
0)\/\/如果在规定的范围内,开始二分法查找\/\/ { if(num==a[mid])\/\/找到所需数据,退出本层循环\/\/ { printf("你所要查找的数字是第%d个。\\n",mid);flag=1;} else if(num>a[mid])\/\/如果要查找的数据比a[mid]大,在前半数组查找\/\/ { top=mid+1;mid=(top+bottom)\/2;} else \/\/...

C语言编程中什么是二分法?
二分法查找,比如要从100个元素里找a元素,那么先分成两组,每组50,搜索一组,如果没有就将另一组分成两组25个,再继续查找,每次搜索结束都将数目均分为两份

用c语言二分法查表法查找数是否在序列中
void main(){ int a[10]={9,16,25,32,2,1,29,81,36,21};int key,low=0,high=10-1,mid,k=-1;int i,j,t;printf(" please input:");scanf("%d",&key);for(i=0;i<10;i++){for(j=0;j<10-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} ...

C语言 二分法查找的问题?请大家帮我解惑。
最坏的情况应该是log2n向下取整+1,这也是折半查找判定树(完全二叉树)的树高。第一,题目不严谨,这个折半查找可以向上或向下取整(大部分参考书上默认用向下取整来讲解),向下取整当然是花4次找到8,而向上取整是3次。第二,最后剩下一个数的时候,那个数还需不需要比较,从代码层面来看,不能简单...

c语言如何实现-数组排序,二分查找
二分法的基本思想是将n个元素分成个数大致相同的两半,取a[n\/2]与x作比较。如果x==a[n\/2],则终止。如果xa[n\/2],则只需在右半部分搜索。本题要求利用上一题得到的数组进行顺序查找和二分查找,分别为两种查找方法计时。include<stdio.h> include<stdlib.h> include void xuanzhe(int a[],...

相似回答