基础篇1——二分查找法

来源:互联网 发布:ios 提取数组相同元素 编辑:程序博客网 时间:2024/06/06 01:19

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


0 0
原创粉丝点击