算法:查找

来源:互联网 发布:新网域名登陆 编辑:程序博客网 时间:2024/06/05 18:26

定义

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

分类

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

简单查找

顺序查找

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

关键代码段

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
  • 数字分析法:(例如:身份证)
  • 平方取中法:
  • 折叠法: 拆分成长度相同的几段,然后再相加。
    等等

处理冲突

  • 开发地址法:线性探测法和双哈希函数探测法

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

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

0 0
原创粉丝点击