用c语言编写二分查找法
2024-10-18 18:18:54
二分法的适用范围为有序数列,这方面很有局限性。
#include<stdio.h> //二分查找法
void binary_search(int a[],int start,int mid,int end); int main()
{
int iLength,istars,i,iTimes,iNumber,n;
int a[];
printf("please enter the length of the array:\n ");
scanf("%d",&iLength);
printf("please enter the number:\n");
for(i=;i<iLength;i++)
{
scanf("%d",&a[i]);
} printf("please enter the number that you want:\n");
scanf("%d",&istars);
/*if(n==istars)
{ }
else
{
printf("sorry ,without this number\n");
}*/
binary_search(a,,istars,iLength); }
void binary_search(int a[],int start,int iPut,int end) {
int i,j,k,n;
i=start;
j=end;
k=(i+j)/;
n=;
while(i<j)
//while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解
{
n++;
if(iPut>a[k])
{
i=k+;
}
if(iPut<a[k])
{
j=k-;
}
if(iPut==a[k])
{
printf("the number need %d times to find......a[%d]=%d\n",n,k,iPut); break;
} }
if(n==0)
printf("failed\n"); }
这是开始参考书目,自己编写的程序,但是程序本身能准确运行范围内的数字,一旦输入范围外的数字则出现卡壳现象。因此,要在源代码中改进。
#include<stdio.h> //二分查找法
void binary_search(int a[],int start,int iPut,int end); int main()
{
int iLength,istars,i,iTimes,iNumber,n;
int a[];
printf("please enter the length of the array:\n ");
scanf("%d",&iLength);
printf("please enter the number:\n");
for(i=;i<iLength;i++)
{
scanf("%d",&a[i]);
} printf("please enter the number that you want:\n");
scanf("%d",&istars);
/*if(n==istars)
{ }
else
{
printf("sorry ,without this number\n");
}*/
binary_search(a,,istars,iLength); }
void binary_search(int a[],int start,int iPut,int end) {
int i,j,k,n,m;
m=;
i=start;
j=end; n=;
while(i<j)
//while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解
{
n++;
k=(i+j)/;//这个为关键!!!!!
if(iPut>a[k])
{
i=k+;
}
if(iPut<a[k])
{
j=k-;
}
if(iPut==a[k])
{
printf("the number need %d times to find......a[%d]=%d\n",n,k,iPut);
m++;
break;
} }
if(m==)
printf("failed\n"); }
第一次代码错误的主要原因为中间值k的位置放错了。k要放在循环之中,要不然无法形成循环,中间值就永远都是中间值,无法利用其的逼近功能,
与此同时编写代码多了,时常会把 if 和while用混,这就需要具体问题,if只执行一次,while则是一个循环,使用while的时候要写上跳出条件,要不然会无休止的运行下去,导致死循环。
最新文章
- ImportError: cannot import name &#39;check_arrays&#39;
- WatiN和HttpWatch交互简介
- Python基本数据结构-集合-创建/与其他类型比较
- VS2012发布网站详细步骤
- Sticks_dfs
- ASP.NET 5 之 错误诊断和它的中间件们
- GestureDetector.OnGestureListener
- jsoup 获取指定页面的所有链接(需后续完善)
- dedecms5.7文章实现阅读全文功能二次开发
- 回环栅栏CyclicBarrier
- http 协议的过程
- iframe间的通信
- man ssh翻译(ssh命令中文手册)
- 微信跳一跳辅助Demo
- Reactjs项目性能优化
- Python:Day25 成员修饰符、特殊成员、反射、单例
- oracle 查询数据库的约束条件
- js正则表达式 replace替换url的参数
- openssl命令实例
- 注册Github账户过程
热门文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
- 成都PC网站建设需要考虑哪些费用呢
- 关于Thread.getContextClassLoader的使用场景问题
- bootstrap入门-2.固定的内置样式
- js onmouseleave
- 微信中修改title
- 解除SQL对组件";Ad Hoc Distributed Queries";的";STATEMENT&#39;OpenRowset OpenDatasource";的访问
- 运行nodejs的blog程序遇见问题
- 导出db2数据库的表结构和数据(转载)
- linux下tftp使用(转一些命令)