码迷,mamicode.com
首页 > 编程语言 > 详细

基础算法-查找:折半查找

时间:2015-05-04 13:20:21      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

折半查找

又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。

折半查找(二分查找)是一种简单而又高效的查找算法,其查找长度至多为㏒2n+1(判定树的深度),平均查找长度为㏒2(n+1)-1,效率比顺序查找要高,但折半查找只能适用于顺序存储有序表(如对线性链表就无法有效地进行折半查找)。

经典非递归算法实现

int Binary_Search(int search_table[], int key, int low ,int high)
{
	while(low <= high)
	{
		mid  = (low + high) / 2;
		if(search_table[mid] < key)
		{
			low = mid + 1;
		}
		else if(search_table[mid] > key)
		{
			high = mid - 1;
		}
		else
		{
			return mid;
		}
	}//while
	
	return -1;
}

经典递归算法实现

int Binary_Search(int search_table[], int key, int low ,int high)
{
	if(low > high)
	{
		return -1;
	}
	int mid = (low + high) / 2;
	
	if(search_table[mid] == key)
	{
		return mid;
	}
	else if(search_table[mid] < key)
	{
		Binary_Search(search_table, key, mid + 1, high);
	}
	else
	{
		Binary_Search(search_table, key, low, mid - 1);
	}
}

  不过,由于折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,这样的算法已经比较好了。但是对于频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用了。

基础算法-查找:折半查找

标签:

原文地址:http://www.cnblogs.com/stemon/p/4475792.html

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