算法:查找
来源:互联网 发布:新网域名登陆 编辑:程序博客网 时间: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
- 查找算法(静态查找)
- 查找算法 二分查找
- 查找算法:二分查找
- 查找算法 - 二分法查找
- 算法--查找--二分查找
- 算法--查找--差值查找
- 查找算法:二分法查找
- 查找算法---二分查找
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法
- 查找算法:
- 22. ubuntu 16.04 LTS 安装mongodb 3.2.8
- 自动泊车辅助系统
- java中的byte运算
- Ant基本使用指南
- STM32自学笔记——看门狗
- 算法:查找
- OPENCV入门教程一:OPENCV的下载,安装与配置
- 在eclipse中查看Android源代码
- B 、B-、B+树总结
- 怎么面试架构师
- Python选择网卡发包及接收数据包
- 《intel汇编语言程序设计》 第三章记录
- 开源协议(三)
- Git(一)