知识点-二分查找

原创 2018年04月16日 16:44:54
int my_binary_serach(int * a, int len, int target) 
1 中位数有两个
  上位中位数:median=len/2
  下位中位数:median=len/2 - 1
  常用下位中位数,写法如下:median=(len-1) /2
2 计算median要防止溢出
  median = low + (high - low) >> 1;
    当low +1 == high的时候,下一个会比较a[low]
3 循环终止的条件是low > high
  low与high中间的数据是目标区间,当目标区间缩小为0的时候,就终止
    a[mid]<target, low = mid + 1
    a[mid]>target, high = mid - 1
    a[mid] == target, return mid;
  如果数组中没有重复数字:
  只有在a[mid]<target的时候,low才会移动到mid+1的位置,所以low保存的是a数组中第一个大于等于target元素的位置
  只有在a[mid]>target的时候,high才会移动到mid-1的位置,所以high保存的是a数组中第一个小于target元素的位置

4 当数组中有重复数据的时候,想要输出第一个大于等于target元素的位置
a[mid]<target, low = mid + 1
    a[mid]>=target, high = mid - 1
low保存的还是第一个大于等于target的元素的位置
high保存的是第一个小于target元素的位置
如果修改a[mid]<=target,low = mid+1,那么low中存储的就是第一个大于target的元素的位置

代码如下:
int my_binary_serach(int * a, int len, int target)
{

	int low=0, high=0;
	high = len - 1;
	int mid;
	while (low <= high)
	{
		
		mid = low + ( (high - low) >> 1 );
		if (a[mid] < target)
		{
			low = mid + 1;
		}
		else if (a[mid] >= target)
		{
			high = mid - 1;
		}
	}
	if (a[low] != target)
	{
		cout << "没有找到"<<low << endl;
	}
	else
	{
		cout << "找到了:"<<low << endl;
	}
	return low;
}




折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)

  • 2009年12月30日 22:11
  • 35KB
  • 下载

VB 二分查找

  • 2010年06月07日 14:10
  • 39KB
  • 下载

经典ACM二分查找,非常好,不下肯定会后悔

  • 2011年05月13日 13:23
  • 328KB
  • 下载

二分查找算法及其变种

前言二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法。其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关...
  • u011116672
  • u011116672
  • 2015-12-06 16:43:23
  • 2681

二分查找的两种实现方式

笔者在这里给出二分查找的两种实现方式。 一. 第一种是健忘版的二分查找,即不管是否已经找到target,查找算法都继续对表进行再分,知道剩下的表的长度为1。 递归实现如下: Error_code re...
  • qwssd
  • qwssd
  • 2017-03-26 21:39:20
  • 309

浅谈-二分查找

一、什么是二分查找? 1、我们首先引入这样一个问题:如果规定某一科目成绩分数范围:[0,100],现在小明知道自己的成绩,他让你猜他的成绩,如果猜的高了或者低了都会告诉你,用最少的次数猜出他的成绩,你...
  • mengxiang000000
  • mengxiang000000
  • 2016-10-07 20:54:13
  • 8848

二分查找的各种情况实现以及一些注意点

转载请注明出处,谢谢: http://blog.csdn.net/u014285517/article/details/45340615 说真的自己开始也认为二分查找实在太简单了,不屑一顾,可是...
  • u014285517
  • u014285517
  • 2015-04-28 20:38:36
  • 925

LintCode二分查找题总结

LC上二分查找那一章有这么些题: 二分查找的题经常用于考,因为它虽然看似简单,但其实要完全正确却不容易,很容易写出死循环的程序。一个二分查找的程序可以很容易判断出一个人功底扎不扎实。 45...
  • luoshengkim
  • luoshengkim
  • 2016-08-03 15:53:49
  • 2629

二分查找求平方根

#include main() { //input int num ; while( 1 ) { scanf("%d", &num ); int i = 1; ...
  • liudepengzhgd
  • liudepengzhgd
  • 2012-08-09 16:46:17
  • 1549

二分查找——LintCode

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 您在真实的面试...
  • fk5431
  • fk5431
  • 2015-12-14 21:31:49
  • 722
收藏助手
不良信息举报
您举报文章:知识点-二分查找
举报原因:
原因补充:

(最多只允许输入30个字)