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

二分查找法

时间:2019-01-15 17:02:53      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:end   位置   while   ==   std   否则   color   有序   name   

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

算法描述:使用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 } 

 

二分查找法

标签:end   位置   while   ==   std   否则   color   有序   name   

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

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