数据结构 - 查找算法

一.查找的概念

二.顺序表查找

特点:

1.记录的数据可以是无序

2.当数据量较大时,查找**效率低,**需要依次遍历

cpp 复制代码
/**
 * @description:            顺序表查找算法,从后往前查找
 * @param - a       :       要操作的数组的指针
 * @param - key     :       指定查找的内容
 * @return          :       成功则返回(元素的下标) , 失败返回(-1)
*/
int Seqsearch(int *a,int key)
{
    int i;

    /* 从后到前依次遍历 */
    for(i = N-1; i >= 0; i--)
    {
        if(a[i] == key)             //若找到了则直接返回
        {
            return i;
        }
    }

    return -1;
}

三.二分法查找

特点:

1.数据必须是有序的。

cpp 复制代码
/**
 * @description:            二分法查找算法
 * @param - a       :       要操作的数组的指针
 * @param - key     :       要查找的内容
 * @return          :       成功则返回该元素的序号,失败则返回 -1
*/
int Binsearch(int *a,int key)
{
    /* low 表示区间下界 , high 表示区间上界 */
    static int low,high,mid;

    low = 0;
    high = N - 1;
    
    /* 循环执行二分法 */
    while(low <= high)
    {
        mid = (low + high) / 2;         //获取中间元素的下标

        /* 1.若下标为 mid 的元素 == key  */
        if(key == a[mid])
            return mid;

        /* 2.若下标为 mid 的元素 > key , 则表示要查找的元素在 mid 的左边 */
        if(key < a[mid])
        {
            high = mid - 1;
        }

        /* 3.若下标为 mid 的元素 < key , 则表示要查找的元素在 mid 的右边 */
        else if(key > a[mid])
        {
            low = mid + 1;
        }

    }

    return -1;
}

三.哈希表查找

1.哈希表定义

存储记录时,有意的建立 key 与记录的存储位置之间的关系,以构建哈希表。

2.构建哈希表

(1).选取恰当的哈希函数

尽可能将记录均匀分布,以减少冲突现象的发生。

①.直接地址法(不常用)
②.数字分析法(不常用)
③.平方取中法

④.叠加法
⑤.保留余数法(常用)
⑥.随机函数法

(2).处理冲突

①.开放地址法
②.链地址法
相关推荐
AI软著研究员6 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish7 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱8 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法