您的位置:首页 > 其它

基础篇1——二分查找法

2015-08-31 13:06 260 查看
二分法即设头,尾,中三个变量以low,high,mid表示。mid=(low+high)/2,每次以mid对应的值进行比较,若索要查找的值>mid对应的值,则low=mid,反之high=mid。之后再以新的low,high求新的mid对应查找,直至找到。部分时候以high>=low作为条件避免重复查找。

类型一:二分法求解

例:8x^4+7x^3+2x^2+3x+6=y,输入y的值,求[0,100]的解

#include <iostream>
#include<stdio.h>
using namespace std;
int calculate(int x)
{
return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
}
int main()
{
int y;
double high=100,low=0,mid;
while(cin>>y)
{
while(low-high<1.0e-6)            / /循环至high,low近乎相等
{
mid=(high+low)/2;
if(calculate(mid)<y)
low=mid;
else
high=mid;
}
printf("%.4lf\n",high);
}
return 0;
}


类型二:二分查找
例:例:X:待查找元素 n:元素个数 num[]单调递增数组

int high=n-1,low=0,mid;
while(low<=high)
{
mid=(high+low)/2;
if(num[mid]==x)
break;
if(num[mid]<x)
low=mid;
else
high=mid;
}
cout<<mid<<endl;
不写全了,领会即可。演示过程如下:

设num数组8 ,10 ,12 ,16,18,20,23,24,28,33,43,55 查找元素为24

low mid high

第一次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55

low mid high

第二次比较 8 ,10 ,12 ,16,18,20, 23 ,24,28,33,43,55

low mid high

第三次比较 8 ,10 ,12 ,16,18,20, 23 , 24, 28 ,33,43,55

low mid
high //num[mid]==x break;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: