数据结构——查找

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、查找的基本概念
  • 二、顺序查找&&折半查找
    • 顺序查找
      • 顺序表的查找
    • 折半查找
      • 折半查找算法
      • 例题
  • 总结


前言

查找的基本概念
顺序查找
折半查找


一、查找的基本概念

1.基本概念
查找:指定某个值,在查找表中确定是否存在一个记录,该记录的关键字等于给定值。
(1) 关键字:记录(数据元素)中的某个数据项的值。
(2) 主关键字:该关键字可以唯一地标识一个记录。
(3) 次关键字:该关键字不能唯一标识一个记录。
(4) 静态查找表:对查找表的查找仅是以查询为目的,不改动查找表中的数据。【无需动态修改查找表(顺序查找、折半查找、散列查找);】
(5) 动态查找表:在查找的过程中同时插入不存在的记录,或删除某个已存在的记录。【需要动态修改和删除的查找表(二叉排序树查找、散列查找)】
(6) 分为查找成功和查找失败
(7) 查找成功:查找表中存在满足查找条件的记录。
(8) 查找不成功:查找表中不存在满足查找条件的记录
(9) 内查找:整个查找过程都在内存中进行。
(10) 外查找:在查找过程中需要访问外存
(11) 平均查找长度ASL——查找方法时效的度量:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值。
查找成功时的ASL计算方法:
数据结构——查找_第1张图片

n:记录的个数
pi:查找第i个记录的概率,且 ( 不特别声明时认为等概率 pi =1/n )
ci:找到第i个记录所需的比较次数
(12) 为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值
(13) 平均查找长度:一次查找长度是需要比较的关键字的次数

在这里插入图片描述

二、顺序查找&&折半查找

顺序查找

概念:主要用于线性表中查找,分为无序线性表和有序线性表查找
1.一般线性表顺序查找
(1)从线性表一端开始逐个关键字是否满足要求,若满足则查找成功,若查找到末尾还未查找到则失败,其中引入哨兵作用是不必判断数组是否越界,因为当i==0时,循环一定会跳出
数据结构——查找_第2张图片
(2) ASL成功 =(n+1)/2, ASL不成功=n+1;当n较大时,平均查找长度较大,效率低;优点是对元素存储无要求;对线性的链表只能顺序查找
3.有序表的顺序查找
(1)概念:查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,可以用如下判定树表示
数据结构——查找_第3张图片
(2) ASL成功=(n+1)/2, ASL不成功=n/2+n/(n+1)

顺序表的查找

int Search(Elemtype a[], int n,KeyType x)
{ //在顺序表a中顺序查找其关键字等于x的元素.若找到,函数值为该元素
   // 在表中的位置否则为0 
  i=n;flag=0;
  while(i>0) if(a[i].key==x)
                {return i;
                 flag=1;
                 break;}
              else i--;          
  if(flag==0) return 0;
   }

折半查找

1.概念:又叫二分查找,仅适用于按关键字排列有序的顺序表
其基本过程是:

将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

其中mid=(low+high)/2,当high

折半查找算法

int Search_Bin(elemType a[],int n,  elemType x)
   /*在有序表ST中折半查找其关键字等于key的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
{   low=0 ;
    high=n-1; 
    while (low<=high)
       { mid=(low+high) / 2;
         if (x= =a[mid])  
         return  mid ;/*找到待查元素*/
        else  if (key<a[mid])  high=mid-1;
                         /*未找到,则继续在前半区间进行查找*/
              else  low=mid+1; /*继续在后半区间进行查找*/
          }
      }


例题

例题:已知11个元素有序表{7,10,13,16,19,29,32,33,37,41,43},查找11和32,可以用如下二叉树表示查找过程;树最下面都是方形,表示查找不成功的情况;查找成功的查找长度为从根结点到目的结点的路径上的结点数,而不成功的情况为从根结点到对应失败结点的父结点路径上结点数;若有序序列有n个结点,判定树有n个圆形非叶子结点和n+1个方形叶结点,是为二叉排序树
数据结构——查找_第4张图片
查找成功:ASL=(1x1+2x2+3x4+4x4)/11=3
查找不成功:ASL=(3x4+4x8)/12=11/3
3. 折半查找方法的优点是比较次数少,查找速度快,平均性能好;
4. 其缺点是要求待查表为顺序存储的有序表,插入删除困难。
5. 因此,折半查找方法适用于不经常变动而查找频繁的有序列表


总结

查找的基本概念
顺序查找
折半查找

你可能感兴趣的:(数据结构,数据结构)