二分法即设头,尾,中三个变量以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
#include
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)
例:例: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]
不写全了,领会即可。演示过程如下:
设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;