二分法查找二分法查找 C++
二分法查找 时间:2021-08-04 阅读:(
)
用二分法查找一个已知顺序的数列中的一个数最坏的情况下需要查找多少次?
最坏情况下的查找次数是(log2(n+1))的取整。
最坏情况下查找到最后单个元素才查找结束,因为每次查找取半,所以需要查找(log2(n+1))的整数次。
二分法查找算法的精确度怎么找?谢谢
二分法用来找零点即有个x符合f(X)=0
方法和简单只要你计算能力过关(一定会有大量计算)
1.根据题意,随机找两个定义域内的两个x
如果f(X2)>0 f(X1)<0
则在X1和x2之间有0点
然后在x1和x2之间选一个X3
如果f(X2)*f(X3)<0 则零点在(X2,X3)之间
f(X2)*f(X3)>0则在(X3,X1)之间
同样的道理一直循环下去
知道范围缩窄道题目所给的精确度,则在这范围里随便去一个数如你的范围以缩窄到(0.03,0.05)而题目要求精确度为0.01 那么你随便取个数0.04或0.05作为函数的解
选我吧 打得很辛苦二分法查找 C++
在VC6.0中运行通过。
》代码一:(在代码三中指出了您没注意到的一些问题)》》:
#include<iostream>
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K,int n);
int a[10],x,i,result;
for(i=0;i<10;i++)
cin>>a[i];
cin>>x;
result=BinSearch(a,x,10);
cout<<result<<endl;
return 0;
}
int BinSearch(int R[10],int K,int n)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] <K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
其实如果是在10个数中查找的话,参数n完全没必要
》代码二:》》:
#include<iostream>
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K);
int a[10],x,i,result;
for(i=0;i<10;i++)
cin>>a[i];
cin>>x;
result=BinSearch(a,x);
cout<<result<<endl;
return 0;
}
int BinSearch(int R[10],int K)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=10-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] <K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
》代码三:》》:
如果您想在若干个(也就是您输入的元素个数不固定)你输入的元素中查找一个数,可以加一个参数n,用它传递数组中元素的个数
#include<iostream>
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K,int n);//函数声明,如果定义在main函数之前,可以不要函数声明 具体参照参照xiang__198的代码
int a[100],x,i,result;
int num;
cout<<"您想输入几个数?"<<endl;
cin>>num;
cout<<"请输入"<<num<<"个已经由小到大排好序的数:"<<endl;
for(i=0;i<num;i++)
cin>>a[i];
cout<<"请输入待查找的数:"<<endl;
cin>>x;
result=BinSearch(a,x,num);//由于定义的函数要返回一个函数值,所以在主函数中要定义一个变量来接收这个返回值,数组元素做实参传递的是数组元素的首地址。
故这里的调用写成result=BinSearch(a,x,num);,其中的a代表的是数组的首地址
cout<<"查找结果:"<<endl;
cout<<result<<endl;
return 0;
}
int BinSearch(int R[10],int K,int n)//不能写成int BinSearch(int R[10],int K,n),注意形参不能为一个常量int BinSearch(int R[10],int K,10) 也不对
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)//查找区间不为空时,如果查找到,则R[mid]!=K,结束循环,否则缩小查找空间继续查找,你的这里少了一个R[mid]!=K,所以即使查找到,也不会输出查找结果,因为形成了死循环
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] <K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K)return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
对我的回答有疑问可以Hi我!恭候!
4324云是成立于2012年的老牌商家,主要经营国内服务器资源,是目前国内实力很强的商家,从价格上就可以看出来商家实力,这次商家给大家带来了全网最便宜的物理服务器。只能说用叹为观止形容。官网地址 点击进入由于是活动套餐 本款产品需要联系QQ客服 购买 QQ 800083597 QQ 2772347271CPU内存硬盘带宽IP防御价格e5 2630 12核16GBSSD 500GB30M1个IP...
HaBangNet支持支付宝和微信支付,只是价格偏贵,之前国内用户并不多。这次HaBangNet推出三个特价套餐,其中美国机房和德国机房价格也还可以,但是香港机房虽然是双向CN2 GIA线路,但是还是贵的惊人,需要美国和德国机房的可以参考下。HaBangNet是一家成立于2014年的香港IDC商家,中文译名:哈邦网络公司,主营中国香港、新加坡、澳大利亚、荷兰、美国、德国机房的虚拟主机、vps、专用...
柚子互联官网商家介绍柚子互联(www.19vps.cn)本次给大家带来了盛夏促销活动,本次推出的活动是湖北十堰高防产品,这次老板也人狠话不多丢了一个6.5折优惠券而且还是续费同价,稳撸。喜欢的朋友可以看看下面的活动详情介绍,自从站长这么久以来柚子互联从19年开始算是老商家了。六五折优惠码:6kfUGl07活动截止时间:2021年9月30日客服QQ:207781983本次仅推荐部分套餐,更多套餐可进...
二分法查找为你推荐
apple以旧换新苹果以旧换新怎么换?价格是怎样的巴西时区巴西和中国的时差是多少 里约和北京时差怎么算密码设置怎么设置开机密码?高质量图片怎么高品质地保存图片visio使用教程怎样使用visio画E-R图微店是什么微店和微商有什么区别呢微店是什么个人微店和企业微店,有什么区别?阶乘函数用函数求阶乘的C语言vrrp配置在ospf中配置vrrp!那么vrrp需要宣告吗?visa信用卡卡号信用卡卡号是多少位数地
中国域名网 老左 私人服务器 域名优惠码 godaddy优惠券 parseerror 圣诞节促销 howfile admit的用法 北京双线 免费防火墙 网站卫士 天翼云盘 支付宝扫码领红包 中国电信网络测速 smtp服务器地址 国外在线代理服务器 工信部网站备案查询 浙江服务器 中国联通宽带测速 更多