1. #include <iostream>
  2. using namespace std;
  3.  
  4. //二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到,
  5. //则分两种情况:
  6. //(1)中间元素比目标大,则继续往左边的那段二分查找
  7. //(2)中间元素比目标小,则继续往右边的那段二分查找
  8. //递归下去,一旦找到元素就停止递归返回目标所在位置;当left>right时跳出递归
  9. //时间复杂度为O(logn)
  10.  
  11. //还有一种查找算法就是顺序查找,就是从第一个元素到最后一个元素都遍历一遍,逐一跟目标比较是否相等
  12.  
  13. //二分查找-递归实现-要求序列已经从小到大排好序
  14. int binary_search(int array[],int left,int right,int key)
  15. {
  16. if(left > right)//递归结束
  17. return -1;//找不到
  18. if(left == right)
  19. {
  20. if(array[left] == key)
  21. return left;
  22. else
  23. return -1;//找不到
  24. }
  25. int mid = (left + right) / 2;
  26. if(array[mid] == key)
  27. return mid;
  28. else if(array[mid] > key)
  29. return binary_search(array,left,mid-1,key);
  30. else if(array[mid] < key)
  31. return binary_search(array,mid+1,right,key);
  32. }
  33.  
  34. //非递归实现
  35. //int binary_search(int array[],int left,int right,int key)
  36. //{
  37. // int mid;
  38. // while(left <= right)
  39. // {
  40. // mid = (left + right) / 2;
  41. // if(array[mid] == key)
  42. // return mid;
  43. // else if(array[mid] > key)
  44. // right = mid - 1;
  45. // else if(array[mid] < key)
  46. // left = mid + 1;
  47. // }
  48. // return -1;//没找到返回-1
  49. //}
  50.  
  51. int main()
  52. {
  53. int array[6] = {1,2,3,4,5,6};
  54. int position = binary_search(array,0,5,3);
  55. cout<<"4 locates on index "<<position<<endl;
  56. return 0;
  57. }

二分查找C++的更多相关文章

  1. jvascript 顺序查找和二分查找法

    第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...

  2. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  3. 从一个NOI题目再学习二分查找。

    二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...

  4. java实现二分查找

    /** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...

  5. 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布

    最新IP地址数据库  来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...

  6. c#-二分查找-算法

    折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...

  7. 【Python】二分查找算法

    二分查找:在一段数字内,找到中间值,判断要找的值和中间值大小的比较.如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找.如果中间值小一些,则在中间值的右侧区域继续按照上述方式查找.直到找到我们 ...

  8. PHP实现文本快速查找 - 二分查找

    PHP实现文本快速查找 - 二分查找法 起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称.根据网站分类ID获取分类名称.根据关键 ...

  9. java二分查找举例讨论

    最近做笔试题有这么一个关于二分查找的例子. 给一个有序数组,和一个查找目标,用二分查找找出目标所在index,如果不存在,则返回-1-(其应该出现的位置),比如在0,6,9,15,18中找15,返回3 ...

  10. JAVA源码走读(二)二分查找与Arrays类

    给数组赋值:通过fill方法. 对数组排序:通过sort方法,按升序.比较数组:通过equals方法比较数组中元素值是否相等.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找 ...

随机推荐

  1. js中cookie的使用

    js中并没有封装好的存储cookie,取得cookie和删除cookie的函数,所以必须得自己手动处理,并且cookie中也只能存储字符串,不能存储数组等复杂的数据类型. // 添加cookie fu ...

  2. Android Fragment 真正的完全解析(上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fra ...

  3. spark统计

    http://www.myexception.cn/sql/2004512.html http://blog.csdn.net/ssw_1990/article/details/52220466 ht ...

  4. [问题2014A02] 解答三(降阶公式法)

    [问题2014A02] 解答三(降阶公式法) 将矩阵 \(A\) 写成如下形式: \[A=\begin{pmatrix} -2a_1 & 0 & \cdots & 0 & ...

  5. Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...

  6. Codeforces Round #316 (Div. 2) D. Tree Requests dfs序

    D. Tree Requests time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  7. Export Data from mysql Workbench 6.0

    原文地址:export-data-from-mysql-workbench-6-0 问题描述 I'm trying to export my database, using MySQL Workben ...

  8. (转载)5分钟安装Linux系统到U盘

    一.工具 使用 LinuxLive USB Creator 下载地址:http://xz2.cr173.com//soft/LinuxLiveusb.zip 二.操作步骤 1.下载linux系统镜像, ...

  9. js实现input输入框只能输入数字的功能(完美测试通过)

    <input type="text" style="ime-mode:disabled;" onpaste="return false;&quo ...

  10. Linux编程之驱动

    增加自己写的驱动程序:http://blog.chinaunix.net/uid-23065002-id-115739.html http://os.51cto.com/art/201108/2840 ...