码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-22 22:02:19      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:close   put   例子   span   stream   opened   png   hid   分治策略   

技术分享
 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——//递归与分治策略//

标签:close   put   例子   span   stream   opened   png   hid   分治策略   

原文地址:http://www.cnblogs.com/cc1997/p/7710780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!