顺序查找

【数据结构】查找

风流意气都作罢 提交于 2020-03-11 23:15:00
平均查找长度(ASL, Average Search Length): 在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字比较次数的平均值,(即 ASL= \(\sum\) 查找概率*比较次数 )(一般为等概率1/n) 静态查找表: 查找表的操作无需动态地修改查找表,如 顺序查找、折半查找、散列查找等。 动态查找表: 需要动态地插入或删除的查找表,如 二叉排序树、二叉平衡树、B树、散列查找等。 线性结构 顺序查找 适用条件: 适用于 线性表 基本思想: 从线性表的一段开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定的条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。 具体实现: typedef struct { //查找表的数据结构 ElemType *data; //元素空间基址,建表时按实际长度分配,0号单元留空 int length; //表的长度 }List; //Sequential Search Table //在顺序表L中顺序查找关键字为key的元素。若找到则返回该元素在表中的位置 int Search_Seq(List L, ElemType key) { L.data[0] = key; //“哨兵” for(i = L

查找算法入门

て烟熏妆下的殇ゞ 提交于 2020-03-03 07:16:13
1.查找算法简介 通常所说的有七种比较常用的查找算法:顺序查找,二分查找,插值查找,斐波那契查找,树表查找,分块查找,哈希查找。顺序查找即是按照数据的存储结构,从前往后一次进行查找,这种方式较为低效。如果数据是按照某种顺序存储在内存中,可以按照二分查找的方式,提高查询的效率。插值查找和斐波那契查找属于对二分查找的优化。树表查找是基于树形存储结构的查找方式,常见的树形存储结构主要有二叉树,平衡二叉树和红黑树。分块查找是二分查找和顺序查找的一种改进的方法,由于只要求索引表是有序的,对块内节点并没有排序的要求,因此特别适合于节点动态变化的情况,说的通俗一点,就是将待查找的数组进行分组,确定每个分组内元素的取值范围,然后将待查找的元素在其对应的范围内进行顺序查找。哈希查找也叫散列查找,整个散列查找过程分为两步:1.在存储时,通过散列函数计算记录的散列地址,并按照此散列地址存储该记录。2.当查找的时候,一样通过散列函数计算记录的散列地址,然后访问散列地址的记录。 2.顺序查找与二分查找 本文主要是简单对顺序查找和二分查找这两个基本的查找方式进行简单的介绍,后面会重点对哈希查找和树表查找进行介绍,欢迎大家一起交流讨论,共同进步。 2.1 顺序查找 顺序查找就是按照存储顺序从前往后进行查找,没什么好说的,直接上代码。 public class shunxu { public static

查找算法学习

巧了我就是萌 提交于 2020-03-01 21:42:39
####查找算法学习 #####顺序查找 最简单的查找方法,从线性表的一端开始,依次将每个记录的关键字进行比较,若相同则返回该关键字所在数组的位置 int SeqSearch(int A[],int n,int key){ int i ; for(i = 0;i<n;i++){ if(A[i] == key){ return i; //返回当前位置 } } return -1; } int main(int argc, const char * argv[]) { int A[10] = {1,2,3,4,5,6,7,8,9,0}; int data = SeqSearch(A,10, 0); printf("%d",data); return 0; } #####折半查找(二分查找) 折半查找要求查找表的数据是线性结构保存,并且还要求查找表的数据是按照关键字由小到大有序排列 int BinarySearch(int A[],int n,int key){ int low,high,mid; low = 0;high = n-1; while(low<=high){ mid = (low+high)/2; if(A[mid]==key){ //如果中间的值恰好等于关键字的值,则返回 return mid; }else if(A[mid]>key) //如果中间值大于关键字 high

顺序查找和二分查找

余生长醉 提交于 2020-02-09 02:44:43
1. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转] 2.顺序查找 <?php //$n为待查找的数组元素的个数,$k为待查找的元素 function seq_sch($array, $n, $k) { $array[$n] = $k; for($i=0; $i<$n; $i++) { if($array[$i]==$k) { return true; break; } } if ($i<$n) //判断是否到数组的末尾 { return $i; } else { return false; } } $array = array(3, 6, 1, 9, 2, 10); $n = count($array); $k = 8; if(seq_sch($array, $n, $k)) { echo "顺序查找成功"; } else { echo "顺序查找失败"; } ?> 顺序查找 是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。 3.二分查找 <?php //$low为待查找的数组中的最小值,$high为数组中的最大值,$k为要查找的关键字 function bin_sch($array, $low, $high, $k) { if

数据结构与算法——顺序查找 、折半查找(也称二分查找) 、索引查找

落花浮王杯 提交于 2020-02-05 01:53:06
目录: 一、查找的相关概念 二、顺序查找 三、折半查找(也称二分查找) 四、索引查找 五、三种查找算法比较 一、查找的相关概念 1、关键字 查找过程中,往往是依据数据元素的某个数据项进行查找,这个数据项通常是数据的关键字。 关键字 :是数据元素中某个数据项的值,用以标识一个数据元素。 若关键字能标识唯一的一个数据元素,则称谓 主关键字 。 若关键字能标识若干个数据元素,则称谓 次关键字 。 例如:张三 2016010002 男 成都 1.75(主关键字是2016010002,次关键字是张三) 2、平均查找长度 ASL ASL=P 1 C 1 +P 2 C 2 +…+P n C n P i ——查找第i个元素的概率 C i ——查找第i个元素需要的比较次数 3、常见的查找算法 顺序查找 二分查找 索引查找 哈希查找 二、顺序查找 1、顺序查找基本思想 从表中指定位置(一般为最后一个,第0个位置设为岗哨)的记录开始,沿某个方向将记录的关键字与给定值相比较,若某个记录的关键字和给定值相等,则查找成功; 反之,若找完整个顺序表,都没有与给定关键字值相等的记录,则此顺序表中没有满足查找条件的记录,查找失败。 int seqsearch ( DataType R [ ] , KeyType key ) { R [ 0 ] . key = key , i = n ; while ( R [ i

顺序查找

微笑、不失礼 提交于 2020-02-02 08:55:43
顺序查找(也叫线性查找) Linear Search 从列表第一个元素开始,顺序进行搜索,直到找到元素活着搜索到列表最后一个元素为止 public int LinearSearch(List<int> li, int value) { for (int i = 0; i < li.Count; i++) { if (li[i] == value) return i; } return -1; } 来源: CSDN 作者: lvcoc 链接: https://blog.csdn.net/lvcoc/article/details/104128887

顺序查找

孤街浪徒 提交于 2020-02-01 08:38:42
基本思想: 从线性表的一端向另一端逐个将关键码与给定值进行比较, 若相等,则查找成功,给出该记录在表中的位置; 若整个表检测完仍未找到与给定值相等的关键码,则查找失败,给出失败信息。 改进的顺序查找 基本思想:设置“哨兵”。 哨兵就是待查值, 将哨兵放在查找方向的尽头处, 免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 顺序查找的优点 : 算法简单而且使用面广。 对表中记录的存储结构没有任何要求,顺序存储和链接存储均可; 对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。 顺序查找的缺点: 平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。 来源: CSDN 作者: 张同学1111 链接: https://blog.csdn.net/weixin_45655152/article/details/103752373

leetcode897.递增顺序查找树

自古美人都是妖i 提交于 2020-01-20 16:56:15
题目描述 给定一个树, 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 提示: 给定树中的结点数介于 1 和 100 之间。 每个结点都有一个从 0 到 1000 范围内的唯一整数值。 解法1:中序遍历再重建树 先按照中序遍历存储节点(较简单),再按照题目要求重新建树。 代码如下: class Solution { public: void getVec(TreeNode* root, vector<int>& nodes) { if(root == NULL) return; if(root->left != NULL) getVec(root->left, nodes); nodes.push_back(root->val); if(root->right != NULL) getVec(root->right, nodes); } TreeNode* increasingBST(TreeNode* root) { vector<int> nodes; getVec(root, nodes); if(nodes.size() <= 1) return root; TreeNode* res = new TreeNode(nodes[0]); TreeNode* head = res; for(int i=1; i<nodes

lintcode 1744. 递增顺序查找树

怎甘沉沦 提交于 2020-01-16 03:34:00
给定一个二叉排序树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 样例 样例 1 : 输入:root = { 5 , 3 , 6 , 2 , 4 , # , 8 , 1 , # , # , # , 7 , 9 } 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9 输出: { 1 , # , 2 , # , 3 , # , 4 , # , 5 , # , 6 , # , 7 , # , 8 , # , 9 } 解释: 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 样例 2 : 输入 : root = { 8 , 3 , 10 , 1 , 6 , # , 14 , # , # , 4 , 7 , 13 , # } 8 / \ 3 10 / \ \ 1 6 14 / \ / 4 7 13 输出 : { 1 , # , 3 , # , 4 , # , 6 , # , 7 , # , 8 , # , 10 , # , 13 , # , 14 } 解释: 1 \ 3 \ 4 \ 6 \ 7 \ 8 \ 10 \ 13 \ 14 注意事项 给定树中的结点数介于 1 和 100 之间。 每个结点都有一个从 0 到 1000 范围内的唯一整数值。 /** * Definition of TreeNode:

数据结构笔记:第七章 查找

寵の児 提交于 2019-12-25 21:34:04
查找基本概念: 列表:由同一类型的数据元素组成的集合。 关键码:数据元素中的某个数据项,可以标识列表中的一个或一组数据元素。 键值:关键码的值。 主关键码:可以唯一地标识一个记录的关键码。 次关键码:不能唯一地标识一个记录的关键码。 查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。 查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。 静态查找 :不涉及插入和删除操作的查找 。 动态查找 :涉及插入和删除操作的查找。 查找结构 :面向查找操作的数据结构 ,即查找基于的数据结构。 线性表:适用于静态查找,主要采用顺序查找技术、折半查找技术。 树表:适用于动态查找,主要采用二叉排序树的查找技术。 散列表:静态查找和动态查找均适用,主要采用散列技术。 顺序查找: 基本思想: 从线性表的一端向另一端逐个将关键码与给定值进行比较, 若相等,则查找成功,给出该记录在表中的位置; 若整个表检测完仍未找到与给定值相等的关键码,则查找失败,给出失败信息。 改进顺序查找: 基本思想:设置“哨兵”。 哨兵就是待查值, 将哨兵放在查找方向的尽头处, 免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 int LineSearch :: SeqSearch(int k) { int i = length; //从数组高端开始比较