首页 > 代码库 > 用c语言编写二分查找法
用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性。
#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[100]; printf("please enter the length of the array:\n "); scanf("%d",&iLength); printf("please enter the number:\n"); for(i=0;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,0,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)/2; n=0; while(i<j) //while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解 { n++; if(iPut>a[k]) { i=k+1; } if(iPut<a[k]) { j=k-1; } 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[100]; printf("please enter the length of the array:\n "); scanf("%d",&iLength); printf("please enter the number:\n"); for(i=0;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,0,istars,iLength); }void binary_search(int a[],int start,int iPut,int end){ int i,j,k,n,m; m=0; i=start; j=end; n=0; while(i<j) //while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解 { n++; k=(i+j)/2;//这个为关键!!!!! if(iPut>a[k]) { i=k+1; } if(iPut<a[k]) { j=k-1; } if(iPut==a[k]) { printf("the number need %d times to find......a[%d]=%d\n",n,k,iPut); m++; break; } } if(m==0) printf("failed\n"); }
第一次代码错误的主要原因为中间值k的位置放错了。k要放在循环之中,要不然无法形成循环,中间值就永远都是中间值,无法利用其的逼近功能,
与此同时编写代码多了,时常会把 if 和while用混,这就需要具体问题,if只执行一次,while则是一个循环,使用while的时候要写上跳出条件,要不然会无休止的运行下去,导致死循环。
用c语言编写二分查找法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。