#include <iostream>
using namespace std;

//二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到,
//则分两种情况:
//(1)中间元素比目标大,则继续往左边的那段二分查找
//(2)中间元素比目标小,则继续往右边的那段二分查找
//递归下去,一旦找到元素就停止递归返回目标所在位置;当left>right时跳出递归
//时间复杂度为O(logn)

//还有一种查找算法就是顺序查找,就是从第一个元素到最后一个元素都遍历一遍,逐一跟目标比较是否相等 

//二分查找-递归实现-要求序列已经从小到大排好序
int binary_search(int array[],int left,int right,int key)
{
	if(left > right)//递归结束
		return -1;//找不到
	if(left == right)
	{
		if(array[left] == key)
			return left;
		else
			return -1;//找不到
	}
	int mid = (left + right) / 2;
	if(array[mid] == key)
		return mid;
	else if(array[mid] > key)
		return binary_search(array,left,mid-1,key);
	else if(array[mid] < key)
		return binary_search(array,mid+1,right,key);
}

//非递归实现
//int binary_search(int array[],int left,int right,int key)
//{
//	int mid;
//	while(left <= right)
//	{
//		mid = (left + right) / 2;
//		if(array[mid] == key)
//			return mid;
//		else if(array[mid] > key)
//			right = mid - 1;
//		else if(array[mid] < key)
//			left = mid + 1;
//	}
//	return -1;//没找到返回-1
//}

int main()
{
	int array[6] = {1,2,3,4,5,6};
	int position = binary_search(array,0,5,3);
	cout<<"4 locates on index "<<position<<endl;
	return 0;
}

二分查找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. dynamics_cast<>

    #include <iostream> class A { public: A(){} ~A(){} ;} }; class B:public A { public: B(){} ~B() ...

  2. Internship-ZOJ2532(网络流求割边)

    Internship Time Limit: 5 Seconds      Memory Limit: 32768 KB CIA headquarter collects data from acro ...

  3. IIS 7中 ISAPI 错误解决

    在本地IIS种发布了一个测试网站,浏览的时候提示 404 错误,无法显示页面,具体错误如下: 解决办法如下: 选择IIS根目录,在右边的功能视图中选择 “ISAPI 和 CGI限制”,双击打开, 把相 ...

  4. 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...

  5. centos使用yum安装mysql

    参考:http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 1.增加yum数据源 (1.1)从http://dev.mysql.com/dow ...

  6. 【OOAD】面向对象设计原则概述

    软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成: 过于僵硬(Rigidity)  ...

  7. windows下安装redis和memcached

    redis安装: http://www.68idc.cn/help/server/20141128135092.html phpredis下载地址:https://github.com/phpredi ...

  8. const char* && string && String^ 类型转换

    const char* && string && String^ 类型转换 const char* ---> string const char * cw= &q ...

  9. sublime_text3配置

    推荐视频 http://v.youku.com/v_show/id_XMzU5NzQ5ODgw.html 介绍的是2版本 准备工作 点击连接下载Sublime Text3 初始化用户信息 第一次安装该 ...

  10. react native get started run 模拟机报错解决

    参照 http://reactnative.cn/docs/0.30/getting-started.html#content 1)当执行 react-native run-android 这个环节的 ...