二分法的适用范围为有序数列,这方面很有局限性。

#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的时候要写上跳出条件,要不然会无休止的运行下去,导致死循环。

最新文章

  1. ImportError: cannot import name &#39;check_arrays&#39;
  2. WatiN和HttpWatch交互简介
  3. Python基本数据结构-集合-创建/与其他类型比较
  4. VS2012发布网站详细步骤
  5. Sticks_dfs
  6. ASP.NET 5 之 错误诊断和它的中间件们
  7. GestureDetector.OnGestureListener
  8. jsoup 获取指定页面的所有链接(需后续完善)
  9. dedecms5.7文章实现阅读全文功能二次开发
  10. 回环栅栏CyclicBarrier
  11. http 协议的过程
  12. iframe间的通信
  13. man ssh翻译(ssh命令中文手册)
  14. 微信跳一跳辅助Demo
  15. Reactjs项目性能优化
  16. Python:Day25 成员修饰符、特殊成员、反射、单例
  17. oracle 查询数据库的约束条件
  18. js正则表达式 replace替换url的参数
  19. openssl命令实例
  20. 注册Github账户过程

热门文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
  2. 成都PC网站建设需要考虑哪些费用呢
  3. 关于Thread.getContextClassLoader的使用场景问题
  4. bootstrap入门-2.固定的内置样式
  5. js onmouseleave
  6. 微信中修改title
  7. 解除SQL对组件&quot;Ad Hoc Distributed Queries&quot;的&quot;STATEMENT&#39;OpenRowset OpenDatasource&quot;的访问
  8. 运行nodejs的blog程序遇见问题
  9. 导出db2数据库的表结构和数据(转载)
  10. linux下tftp使用(转一些命令)