算法学习之二分查找

二分查找



1.1顺序查找基本思路:从表的一端开始顺序扫描,直到找到k值或者查找失败。

2.1二分法查找要求线性表是有序表,即表中节点关键字必须有序,并且要用向量作为表的存储结构。

2.2二分查找的基本思路

(1)确定该区间的中点:Mid=[(hight+low)/2];

(2)待查找的k值与R[mid].key比较,若相等则,查找成功;否则继续确定新的区间...

假如R[mid].key>k,确定新区间在low至mid之间,新的high=mid-1;

假如R[mid].key<k,确定新区间在mid至high之间,新的low=mid+1;

(3)依次进行直到找到k值或者查找失败,结束算法。

(4)如图所示(二分查找数据58):





2.3二分法查找算法

#include<stdio.h> 
#define keytype int
typedef struct{
	keytype key;
}tablekeytype;
int binserach(sqlist *r,int n,keytype k) 
{
	int mid,high=n-1,low=0;
	if(r[low].key=k)
	{
		return low;
	}
	if(r[high].key=k)
	{
		return high;
	}
	while(low<high)
	{
		mid=low+((high-1ow)/2);
		//使用(low + high)/2会有溢出问题       
	    	// (low+high)/2结果大于表达式结果所能表示的最大值    
  		//产生溢出后在除2不会产生正确结果,low+((high-1ow)/2)不会产生这样的问题
		if(r[mid].key==k)
		{
			return mid;
		}
		elseif(r[mid].key>k)
		{
			high=mid-1;
		}
		else
			low=mid+1;
	}
	if(low>high)
		return error;
}

2.4描述二分查找的判定树

判定树是内部节点的总数为n=2h次方,树的深度为h=[log2(n+1)]-1的满二叉树,第k层的节点数为2k-1次方,查找所需要的比较次数为k次。ASL=log2(n+1)-1,最坏情况下,比较次数为[log2(n+1)]





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值