数据结构与算法(C语言版)----查找

本文介绍了查找表的基本概念,区分了静态和动态查找表,并详细讲解了顺序查找、折半查找和分块查找(索引顺序查找)的实现、时间复杂度以及适用场景。排序与查找的比较也有所涉及。
摘要由CSDN通过智能技术生成

查找表

一种以集合为逻辑结构,以查找为核心运算,同时包括其他运算的数据结构;

由同一类型的数据元素构成的集合。

查找表 : 静态查找表、动态查找表

查找

给定某个值,再查找表中确定一个关键字等于给定值的记录或数据元素。

关键字(key)

数据元素中某个数据项的值;

当数据元素只有一个数据项时,其关键字就是该数据元素的值。

            Pi  查找第i个元素的概率

            Ci  查找第i个元素时同给定值k的比较次数

         

顺序查找

存储方式    影响    方法的实现

//数据元素定义
typedef struct{
   KeyType key;//关键字域
   InfoType otherinfo;//其他域
}ElemType;
//顺序表定义
typedef struct{
ElemType *R;//存储空间基地址
int length;//当前长度
}SSTable;
int Search_Seq(SSTable ST,KeyType key)
{//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
  for(i=ST.length;i>=1;--i)
  if(ST.R[i].key==key) return i;
return 0;
}
//设置监视哨的顺序查找
int Search_Seq(SSTable ST,KeyType key)
{//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
ST.R[0].key=key;//监视哨
for(i=ST.length;ST.R[i].key!=key;--i);//从后往前找
return i;
}
  

                                                     

折半查找(二分查找)

要求:线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

int Search_Bin(SSTable ST,KeyType key)
{//在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
  low=1;high=ST.length;//置查找区间初值
   while(low<=high)
      {
         mid=(low+high/2);
         if(key==ST.R[mid].key) return mid;
//找到待查元素
        else if(key<ST.R[mid].key) high=mid-1;
//继续在前一子表继续查找
        else low=mid+1;
//继续在后一子表继续查找
}
return 0;
//表中不存在待查元素
}

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

1.除了表本身,需建立一个索引表

2.查找过程分两步进行:确定待查元素所在的块(子表)、在块中顺序查找(顺序查找和折半查找的简单合成

三种查找效率关系       折半查找>分块查找>顺序查找

顺序查找、折半查找和分块查找

比较项目查找方法
顺序查找折半查找分块查找
查找时间复杂度O(n)O(\log2n)与确定所在块的查找方法有关
特点算法简单,对表结构无任何要求,但查找效率较低。对表结构要求较高,查找效率较高对表结构有一定要求,查找效率介于折半查找和顺序查找之间
适用情况任何结构的线性表,不经常进行插入和删除有序的顺序表,不经常进行插入和删除块间有序、块內无序的顺序表,经常进行插入和删除

排序与查找比较次数

顺序表长度为n

快速排序n(n-1)/2
堆排序n\log2n
顺序查找n
寻找最大项n-1
有序二分查找\log2n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白上线*^_^*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值