查找的基本概念及其顺序查找思想和实现(C语言)
Posted bfhonor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找的基本概念及其顺序查找思想和实现(C语言)相关的知识,希望对你有一定的参考价值。
一、查找基本概念
(一)基本概念
- 查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找
- 查找表(查找结构)—— ⽤于查找的数据集合称为查找表,它由同⼀类型的数据元素(或记录)组成
- 关键字 —— 数据元素中唯⼀标识该元素的某个数据项的值,使⽤基于关键字的查找,查找结果应该是唯⼀的。
(二)对查找表的常见操作
(三)查找算法的评价指标
- 查找长度——在查找运算中,需要对比关键字的次数称为查找⻓度
- 平均查找长度(ASL, Average Search Length)—— 所有查找过程中进行关键字的⽐较次数的平均值。
- ASL的数量级反映了查找算法的时间复杂度。
二、顺序查找
(一)算法思想
- 顺序查找:又叫“线性查找”,通常用于线性表。
- 算法思想:从头到 jio 挨个找(或者反过来也OK)。
(二)算法实现
1. 顺序查找的实现
typedef struct{ //查找表的数据结构(顺序表)
ElemType *elem; //动态数组基址
int TableLen; //表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST, ElemType key){
int i;
for(i=0; i<ST.TableLen&&ST.elem[i]!=key; ++i);
//查找成功,则返回元素下标。查找失败,则返回-1.
return i==ST.TableLen ? -1 : i;
}
2. 顺序查找的实现(哨兵)
typedef struct{ //查找表的数据结构(顺序表)
ElemType *elem; //动态数组基址
int TableLen; //表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST, ElemType key){
ST.elem[0]=key; //👈哨兵
int i;
for(i=ST.TableLen; ST.elem[i]!=key; --i);//从后往前找
return i; //查找成功,则返回元素下标;查找失败,则返回0
}
3. 查找效率分析
(三)算法优化
1. 顺序查找的优化(对有序表)
(1)用查找判定树分析ASL
- 一个成功结点的查找长度 = 自身所在层数
- 一个失败结点的查找长度 = 其父节点所在层数
- 默认情况下,各种失败情况或成功情况都等概率发⽣
2. 顺序查找的优化(被查概率不相等)
以上是关于查找的基本概念及其顺序查找思想和实现(C语言)的主要内容,如果未能解决你的问题,请参考以下文章