二分查找Binary-Search——//递归与分治策略//

Posted ChaosBlog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找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。

[总结]

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

以上是关于二分查找Binary-Search——//递归与分治策略//的主要内容,如果未能解决你的问题,请参考以下文章

二分查找

二分查找

二分查找

704.二分查找

704二分查找

二分查找:思路很简单,细节是魔鬼