首页 > 其他 > 详细

二分查找法

时间:2019-01-15 16:50:40      阅读:178      评论:0      收藏:0      [点我收藏+]

前提条件:要查找的序列应时一个有序序列。

算法描述:使用left和right标记序列的两个端点,left=0,right=序列个数-1,用middle表示序列的中间位置,即middle=(low+high)/2;如果处于middle处的元素值小于目标值,则下一次寻找目标值的范围缩小为【middle+1,right】,即left=middle+1,否则范围为【left,middle-1】,即right=middle-1;随着搜索的不断进行,left从左向右移,right从右向左移。一旦在middle处找到目标,查找将停止;如果没有找到目标,left和right将重合。下图显示了此过程。

技术分享图片

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int a[10]={10,14,21,38,45,47,53,81,87,99};
 6     int left=0,right=9;//标记序列的两个端点,此例中使用的是元素的下标 
 7     int middle;//序列的中间位置middle=(left+right)/2
 8     int b=47;//目标值 
 9     bool isExist=false;//用来表示是不是找到目标值 ,false表示没找到
10     int i=0;//表示循环多少次找到目标值 或者 最终找不到目标值
11     while(left<=right)
12     {
13         middle=(left+right)/2;
14         cout<<++i<<endl;
15         if(a[middle]==b) 
16         {
17             isExist=true;
18             break;
19         }
20         else if(a[middle]<b)
21             left=middle+1;
22         else
23             right=middle-1;
24     }
25     if(isExist)
26         cout<<b<<"找到:在序列的第"<<middle+1<<"位置"<<endl; 
27     else
28         cout<<"序列中没有找到"<<b<<endl;
29 } 

 

二分查找法

原文:https://www.cnblogs.com/legenBlog/p/10272400.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!