赞
踩
查找表
一种以集合为逻辑结构,以查找为核心运算,同时包括其他运算的数据结构;
由同一类型的数据元素构成的集合。
查找表 : 静态查找表、动态查找表
查找
给定某个值,再查找表中确定一个关键字等于给定值的记录或数据元素。
关键字(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(2) | 与确定所在块的查找方法有关 |
特点 | 算法简单,对表结构无任何要求,但查找效率较低。 | 对表结构要求较高,查找效率较高 | 对表结构有一定要求,查找效率介于折半查找和顺序查找之间 |
适用情况 | 任何结构的线性表,不经常进行插入和删除 | 有序的顺序表,不经常进行插入和删除 | 块间有序、块內无序的顺序表,经常进行插入和删除 |
排序与查找比较次数
快速排序 | n(n-1)/2 |
堆排序 | n2 |
顺序查找 | n |
寻找最大项 | n-1 |
有序二分查找 | 2 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。