• 数据结构---查找


    基本概念

    查找

    根据给定的值,在查找表中确定一个其关键字等于给定值的数据元素。

    关键字

    关键字又细分为主关键字和次关键字。若某个关键字可以唯一地识别一个数据元素时,称这个关键字为主关键字,例如学生的学号就具有唯一性;反之,像学生姓名、年龄这类的关键字,由于不具有唯一性,称为次关键字

    静态查找表和动态查找表

    在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表

    平均查找长度ASL

    线性表的查找

    顺序查找

    优点: 简单,对逻辑次序无要求,且不同储存结构均可使用。

    缺点: ASL长,时间效率低

    ASL: (1+2+..+n)/n=(n+1)/2

    1. int Search_Seq(SSTable ST,KeyType key){
    2. ST.R[0].key=key;//设置监视哨
    3. for(i=S+T.length;ST.R[i].key!=key;---i);
    4. return i;
    5. }

    二分查找

    前提:
    只能是数组,不能是链表,并且数组有序
    查找次数:
    比较次数等于查找成功时位于的树的深度。
    即 ⌊log2n⌋+1⌊log2n⌋+1
    ASL:
    log2(n+1)−1log2(n+1)−1 (n>50)

    1. int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
    2. {
    3. int left = 0;
    4. int right = size - 1; // 定义了target在左闭右闭的区间内,[left, right]
    5. while (left <= right) { //当left == right时,区间[left, right]仍然有效
    6. int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出
    7. if (nums[middle] > target) {
    8. right = middle - 1; //target在左区间,所以[left, middle - 1]
    9. } else if (nums[middle] < target) {
    10. left = middle + 1; //target在右区间,所以[middle + 1, right]
    11. } else { //既不在左边,也不在右边,那就是找到答案了
    12. return middle;
    13. }
    14. }
    15. //没有找到目标值
    16. return -1;
    17. }
  • 相关阅读:
    基于虚拟阻抗的下垂控制——孤岛双机并联Simulink仿真
    应用在触控一体机触摸屏中的电容式触控芯片
    被环境变量虐过一遍获得的启示
    攻防世界心仪的公司
    5.springcloudalibaba nacos 2.2.3源码下载并且注册服务到nacos
    MATLAB矩阵
    实现更低功耗R5F51406BDNE、R5F51406ADFK、R5F51406ADFL、R5F51406AGFN搭载RXv2内核的32位微控制器
    高项 范围管理论文
    【算法】回溯法Backtracking
    【小程序】集成echarts问题记录
  • 原文地址:https://blog.csdn.net/lalajh/article/details/126330447