算法:查找

定义

查找又称为检索或者是搜索,是指从一批记录中找出满足条件的某一个记录的过程。

分类

  • 简单查找
  • 二叉树排序树
  • 索引查找
  • 哈希表

简单查找

顺序查找

(以线性表为基础,静态查找)
从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若所有记录查找完成,仍然未找到与关键字匹配的字段,则表示查找失败,返回一个失败值。

关键代码段

for (int i = 0; i < n && a[i] != key; i++)
            ;
        if (i < n)
            return i;
        else
            return -1;
折半查找

又称二分查找。这种查找方法要求查找表的数据时线性结构存储,并且要求查找表中的数据是按照关键字由小到大有序排列。

关键代码段

int left ,right,mid;

        while(left<=right){
            mid =(left+right)/2;//计算中间位置
            if(arr[mid]==key)  //中间位置与关键字相等
                return mid;   //返回序号
            else if(arr[mid]>key)//中间位置大于关键字
                right = mid -1;  //重新定义查找范围
            else            //中间位置小于于关键字
                left = mid + 1;//重新定义查找范围
        }

二叉树排序树

(以线性表为基础,动态查找)
特性:二叉排序树或者是一棵空树,或者具备以下特性的二叉树

  • 若它有左子树,则左子树上所有结点的数据均小于根结点的数据
  • 若它有右子树,则右子树上所有结点的数据均大于根结点的数据
  • 左,右子树本身又各是一棵二叉排序树

索引查找

索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。索引查找的过程是:首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定K1对应的子表在主表中的开始位置和长度,然后再根据给定的关键字K2,在对应的子表中查找出关键字等于K2的元素(结点)。

哈希表

概念
    以线性表中每个元素的关键字key为自变量,通过一定的函数关系h(key)计算出函数的值,把这个值作为数组的下边,将元素存入对应的数组元素中。

函数h(key)称为哈希函数,函数的值称为哈希地址,这种方式创建的表称为哈希表。

  • 直接定址法:关键字本身或者和某些数字一起,要求关键字连续(例如:学号)
  • 除数取余法:key%x
  • 数字分析法:(例如:身份证)
  • 平方取中法:
  • 折叠法: 拆分成长度相同的几段,然后再相加。
    等等
处理冲突
  • 开发地址法:线性探测法和双哈希函数探测法

    • 线性探测法:从发生冲突的单元起,往后查找,找到未存数据的单元,保存冲突数据
    • 双哈希函数探测法:如果有冲突,再设计一个哈希函数,重新计算。
  • 链接法

通过关键字计算后,有冲突,在冲突的单元上添加指针,指向一个新的内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

记住我的名字啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值