大三党,大数据专业,正在为面试准备,欢迎学习交流
。`文章中总结了四种常见的查找方法,内容包括了基本概念及代码实现。内容较多,特别是哈希查询的内容比较多。可能有所遗漏,但是总结了大部分的内容。
附带一本热销的电子书配套适用更佳,链接如下
大话数据结构
提取码:mazy
1 常见的查找算法
- 顺序查找
- 二分查找
- 索引查找
- 哈希查找
2 平均查找长度ASL比较查找算法性能
公式:ASL=P1C1+P2C2+…+PnC
Pi——查找第i个元素的概率
Ci——查找第i个元素需要的比较次数
3 顺序查找
3.1 顺序查找的思想
- 从表中指定位置(一般为最后一个,第0个位置设为岗哨)
的记录开始,沿某个方向将记录的关键字与给定值相比较,
若某个记录的关键字和给定值相等,则查找成功; - 反之,若找完整个顺序表,都没有与给定关键字值相等的
记录,则此顺序表中没有满足查找条件的记录,查找失败。
3.2 顺序查找代码
int seqsearch(DataType R[], KeyType key)
{
R[0]=key, i=n;//第一个位置设为岗哨
while (R[i] != key)
i=i-1;//从最后一个位置往前查找
return i;
}
3.3 顺序表上顺序查找的平均查找长度(性能分析)
对于顺序表的
Ci=n-i+1
Pi =1/n
则可以得到如下计算结果(等差数列的计算):
4 折半查找
4.1 折半查找的前提条件及查找过程
前提条件
如果顺序表中的纪律按关键字值有序即R[i].≤R[i+1],i=1,2,…,n-1,则称顺序表为有序表。
4.2 折半查找代码
int BinarySearch(DataType SL[], KeyType key, int n){
/*在长度为n的有序表SL中折半查找其关键字等于key的记录*/
/*查找成功返回其在有序表中的位置,查找失败否返回0*/
int low=1;
int high=n;
while(low<=high){
mid=(low+high)/2;//取整 小的数 右边的数
if(key = = SL[mid