基础篇1——二分查找法

        二分法即设头,尾,中三个变量以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;


你可能感兴趣的:(编程算法基础)