查找的基本概念及其顺序查找思想和实现(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语言)的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第七章查找-第二节1:顺序查找及其优化

顺序表详解及其c语言代码实现

分块查找的思及其查找效率分析(C语言)

c语言如何实现-数组排序,二分查找

C语言折半查找法详细代码(假如有10个已排好序的数)

C语言数据结构——静态查找顺序查找