二分法其实就是一种通过不断的排除不可能的东西,来最终找到需要的东西的一种方法.所以可以理解成排除法。
之所以叫二分,是因为每次排除都把所有的情况分成"可能"和"不可能"两种,然后抛弃所有"不可能"的情况。
最正统的二分法中,是每次排除都可以排除掉一半的情况,这样子的寻找效率是很高的。比如要在1-100的数字中询问出某一个特定的数字,我可以先问,这个数字是否大于50?这样无论是或者不是,我都可以排除掉一半的数字(50之前的被排除,或者50之后的被排除)。假如回答不是,接着我可以问是否大于25?又可以排除掉一半。这样下去,很快就会排除剩下一个数字,即是要找的那个。
what:将待查找的元素与数组中的中间位置元素进行比较。
when:要查找数组中某一元素。
how:将待查找的数字与数组中的中间位置进行比较。
如果比中间位置的元素值小,去左边查找(更改结束位置)。
如果比中间位置的元素值大,去右边查找(更改起始位置)。
for example:
.
int nums[9]={1,2,3,4,5,6,7,8,9};
int i=0,left,right,mid,search;
left=0;
right=8;
printf("请输入要查找的值n");
scanf("%d",&search);
while(left<=right) //当为偶数序列时会出现相等的情况
{i++;mid=(left+right)/2; //将第一位和最后一位相加除2,取到中间的值来进行比较if(search<nums[mid]) {right=mid-1; //如果输入的数小于中间数,那就-1位进行查找数}else if(search>nums[mid]){left=mid+1; //如果输入的数大于中间数,那就+1位进行查找数}else{ break; //找到后跳出程序}
}
printf("查找这个%d一共用了%d次n",search,i);
本文发布于:2024-01-29 14:42:12,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170651053816004.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |