数据结构 - 查找算法

一.查找的概念

二.顺序表查找

特点:

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).处理冲突

①.开放地址法
②.链地址法
相关推荐
kkeeper~1 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
2401_868534782 小时前
论企业网络设计
数据结构
wabs6663 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964133 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚3 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本4 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov5 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫5 小时前
特征工程处理
人工智能·算法·机器学习
z落落6 小时前
C#参数区别
java·算法·c#
c238566 小时前
vector(下)
数据结构·算法