c_对分查找

原创 2013年12月03日 14:21:20
#include "stdio.h"

typedef int ElementType;

enum{
	NotFind = -2,
	Error = -1,
};

int main()
{
	ElementType a[]={0,1,2,3,4,6,7,8,9,10};
	int size = sizeof(a)/sizeof(a[0]);

	int iRet = BinarySearch(a, 6, size);
	printf("search 6 ,pos: %d\n",iRet);
	iRet = BinarySearch(a, -2, size);
	printf("search -2 ,pos: %d\n",iRet);
	iRet = BinarySearchRecursion(a, 6, 0, size);
	printf("recursion search 6 ,pos: %d\n",iRet);
	iRet = BinarySearch(a, -2, 0, size);
	printf("recursion search -2 ,pos: %d\n",iRet);
	iRet = BinarySearchRecursion(a, 5, 0, size);
	printf("recursion search 5 ,pos: %d\n",iRet);
	return iRet;
}

int BinarySearchRecursion(const ElementType *a, ElementType x, int Low, int High)
{
	ElementType Mid = (Low+High)/2;

	if(Low == High)
	{
		return Error;
	}
	if(*(a+Mid) < x)
	{
		return BinarySearchRecursion(a,x,++Mid,High);
	}
	else if(*(a+Mid) > x)
	{
		return BinarySearchRecursion(a,x,Low,--Mid);
	}
	return Mid;
}
int BinarySearch(const ElementType *a, ElementType x, int size)
{
	ElementType Low,Mid,High;
	Low = 0;
	High = size - 1;

	if(x > *(a+High) || x < *(a+Low))
	{
		printf("High:%d,Low:%d---->\n", *(a+High), *(a+Low));
		return Error;
	}
	while(Low <= High)
	{
		Mid = (Low+High)/2;
		if(*(a+Mid) < x)
		{
			Low = ++Mid;
		}
		else if(*(a+Mid) > x)
		{
			High = --Mid;
		}
		else
		{
			return Mid;
		}
	}
	return NotFind;
}

c++实现对分查找

说明及代码如下: /*** 本例用来实现对分查找: 对分查找:给定一个整数X和一列已经排好序的整数,查找X是否在这列整数中,若在,则返回整数 在这列整数中的位置;若不在,则返回...
  • liuwei271551048
  • liuwei271551048
  • 2014年05月13日 16:50
  • 644

二分查找法的基本思想与实现代码

二分查找法思想: 二分查找法又称夹逼法,二分查找法使用的基本条件是一个有序的数组,通过从数组头部和尾部折半,判断要查找的数和mid位置数值的大小,来判断要查找的数实在那一半,之后继续折半查找,直至找...
  • len_yue_mo_fu
  • len_yue_mo_fu
  • 2016年08月09日 13:19
  • 1784

对分查找、欧几里得算法、幂运算

对分查找 算法思想 所用时间算法实现 欧几里得算法 算法思想所用时间算法实现 幂运算 算法思想所用时间算法实现...
  • abcdu1
  • abcdu1
  • 2017年06月30日 22:34
  • 116

leetcode题目 二分查找升级版

题目: Given a sorted array of integers, find the starting and ending position of a given target value....
  • cainiaoxiaomin
  • cainiaoxiaomin
  • 2015年10月05日 22:30
  • 290

C语言二分查找法(指针和数组实现)

/* * 编写一个函数,对一个已排序的整数表执行二分查找。 * 函数的输入包括各异指向表头的指针,表中的元素个数,以及待查找的数值。 * 函数的输出时一个指向满足查找要求的元素的指针,当未查找到...
  • toto1297488504
  • toto1297488504
  • 2014年07月25日 23:20
  • 1193

循环有序数组中的二分查找 Search in a rotated sorted array

二分查找是必须要掌握的技能。二分查找适用于有序的、顺序的存储结构。 1、可以用它来查找某一个数 2、可以用于查找某一个范围。如《二分查找有序数组中某个数的所在范围 Search for a Rang...
  • luckyjoy521
  • luckyjoy521
  • 2013年12月22日 19:16
  • 2129

循环有序数组的查找笔记

一个循环有序数组(如:3,4,5,6,7,8,9,0,1,2),不知道其最小值的位置,要查找任一数值的位置。要求算法时间复杂度为log2(n)。 循环有序数组的性质: 1.将一个循环有序数组...
  • philosophyatmath
  • philosophyatmath
  • 2016年02月22日 22:03
  • 1428

2种二分查找及2种优化方式

题目1:经典算法—二分查找 折半查找的基本思想:减小查找序列的长度,分而治之的进行关键字的查找。该序列必须是有序的。 查找过程是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字...
  • hacker00011000
  • hacker00011000
  • 2015年09月06日 22:13
  • 964

C语言之二分查找

二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值Q,然后用将其先和数组中间的比较,如果Q大于中间值,则进行下一次mid后面的比较,直到找到相等的,就可以得到他的位置。  示例代码如...
  • u014136713
  • u014136713
  • 2016年03月13日 19:21
  • 1756

对分易教学平台考勤漏洞探索,批量签到app制作杂谈

一次课上,老师让同学们扫描二维码关注对分易教学平台,使用对分易进行考勤,其特点是在设定的时间内,必须在微信里面输入四个数字(老师提供的考勤密码),方式很新颖,但是没有基于生物特征签到的方法都是有漏洞的...
  • catkint
  • catkint
  • 2016年10月23日 17:26
  • 8667
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c_对分查找
举报原因:
原因补充:

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