【数据结构与算法】线性表的查找

  • 顺序查找(线性查找)
  • 折半查找(二分或对分查找)
  • 分块查找

顺序查找

typedef struct{ //顺序表结构类型定义
	ElemType *R;  //表基址
	int length;  //表长
}SSTable ;
SSTable ST;   //定义顺序表ST
int Search_Seq(SSTable ST,KeyType key){
	//若成功返回其位置信息,否则返回0
	for(i=ST.length;i>=1;--i)
		if(ST.R[i].key==key) return i;
	return 0;
}

改进:增加“哨兵”,将待查关键字key存入表头

int Search_Seq(SSTable ST,KeyType key){
	ST.R[0].key=key;
	for(i=ST.length;ST.R[i].key!=key;--i);
	return i;
}

顺序查找的特点:
优点:算法简单,逻辑次序无要求,且不同存储结构均适用。
缺点:ASL太长,时间效率太低

折半查找:每次将待查记录所在区间缩小一半
适用于有序线性表
表长n,low,high,mid分别指向待查元素所在区间的上界、下界和中点。key为给定的要查找的值

int Search_Bin(SSTable ST,KeyType key){
	low=1;high=ST.length;   //置区间初值
	while(low<=high){
		mid=(low+high)/2;
		if(ST.R[mid].key==key)  return mid;  //找到待查元素
		else if(key<ST.R[mid].key)   //缩小查找区间
			high=mid-1;   //继续在前半区间查找
			else low=mid+1;  //继续在后半区间查找
		}
	return 0//顺序表中不存在待查元素
	}  //非递归

折半查找
优点:效率比顺序查找高
缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)

分块查找(索引顺序查找)

顺序法查找效率:(n+1)/2
折半法查找效率:log2(n+1)
分块查找效率:log2(n/s+1)+s/2 【s为每块内部记录个数,n/s为块的数目】

优点:插入删除容易,无需进行大量移动
缺点:要增加一个索引表的存储空间并对初始索引表进行排序算法
适用:如果线性表既要快速查找又经常动态变化,则可采用分块查找

查找方法比较

顺序查找折半查找分块查找
ASL(平均查找长度)最大最小中间
表结构有序表、无序表有序表分块有序
存储结构顺序表、线性链表顺序表顺序表、线性链表
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值