zoukankan      html  css  js  c++  java
  • [图解算法] 二分查找Binary-Search——<递归与分治策略>

     1 #include"iostream.h"
     2 
     3 int BinarySearch(int a[],int left,int right,const int& x)
     4 {
     5     if(left<right)
     6     {
     7         int middle = (left+right)/2;
     8         if(x==a[middle]) return middle;
     9         if(x>a[middle]) return BinarySearch(a,middle+1,right,x);
    10         else return BinarySearch(a,left,middle-1,x);
    11     }
    12 }
    13 
    14 void main(){
    15     int n,x,i,a[99];
    16     cout<<"input the length of a[]"<<endl;
    17     cin>>n;
    18     cout<<"input array a[]"<<endl;
    19     for(i=0;i<n;i++) cin>>a[i];
    20     cout<<"input the num u want to find"<<endl;
    21     cin>>x;
    22     cout<<BinarySearch(a,0,n-1,x)+1<<endl;
    23 }
    View Code

    [图解+例子]

    前提:有序数组。

    一、建立数组

    (共10个数)

    二、传参

    int a[] 数组

    int left,int right 当前查找范围限定(left=0;right=n-1;10个数即n=10;left=0;right=9

    const int& x 待查找数值(假如查找27

    三、取中间值middle判断

     

    如果27==7 返回当前middle值(0+9)/2=4

    如果27>7查找右半段

    if (x>a[middle]) return BinarySearch(a,middle+1,right,x);  //设定右半段范围(right值不变middle+1)

    如果27<7查找左半段

    else return BinarySearch(a,left,middle-1,x);//设定左半段范围(left值不变middle-1)

    当前查找右半段即  left=5;right=9

     如果27==25 返回当前middle值(5+9)/2=7

    ……

    ……

    如此继续递归调用BinarySearch函数

    直到middle=(8+9)/2=8时 ;27==27;return middle

     

    [特例]

    如果要找元素在边上的话,如36,那么下一次就是left=9;right=9;自然middle也等于9。

    [总结]

    子问题:范围内取中值;递归不断缩小确定范围。

  • 相关阅读:
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
    第 6 章 Cinder
  • 原文地址:https://www.cnblogs.com/cc1997/p/7710780.html
Copyright © 2011-2022 走看看