折半查找

  对于关键码有序的数列,用二分法查找。

  比如123456789,要找2,先折半找5,2比5小,继续向左查找,找3,2比3小,继续向左查找,2匹配成功。

  可以想到这是个递归的过程我这里递归非递归都写一遍。

  首先是非递归的算法。

  • 传入一个vector<int> &v和一个 待查找数值k
  • 设定查找的下界=0;上界为v.size();
  • 开始循环,跳出循环有2种情况,1找到了数值,2-就是下界比上界大的情况
  • 这里开始while(下界<=上界)
  • {
  • 设置中界为(上界+下界)/2
  • if(待查值小于中间值)就把上界设置为中间位置-1
  • else if(待查值大于中间值)就把下界设置为中间位置+1
  • else 这种情况就是查找到了直接return mid中间位置就行
  • }
  • int search(vector<int>& v,int k)
    {int low=0,high=v.size();while(low<=high){int mid=(low+high)/2;if(k<v[mid])high=mid-1;else if(k>v[mid])low=mid+1;else return mid;}
    }

  接着是递归算法,递归和非递归一个思想

  • 因为是递归很容易想到,参数要4个,1-传入数组,2-传入下界,3-传入上界,4-待查数字
  • 递归边界也像上面非递归一样,low>high或者找到的时候
  • int bin_search(vector<int>& v,int low,int high,int k)
  • 如果high<low return 0;//没找到的
  • else{中间位置=(low+high)/2;
  • 假如待查值小于中间值,则 递归调用return bin_search(v,low,mid-1,k)
  • 假如待查值大于中间值,则递归调用return bin_search(v,mid+1,high,k)
  • 找到值return mid;
  • int bin_search(vector<int>& v,int low,int high,int k)
    {if(low>high)return 0;else{int mid=(low+high)/2;if(k<v[mid])return bin_search(v,low,mid-1,k);else if(k>v[mid])return bin_search(v,mid+1,high,k);else return mid;}
    }//要调用就是int i=bin_search(v,0,v.size(),待查值即可).
    

             和折半查找类似的是二叉排序树查找

  • 明显,二叉数的查找肯定是递归。这里默认都会二叉排序树的构建。
  • 和上面递归的查找没啥区别。
  • 直接上代码
  • BiNode<int>* bt_search(BiNode<int> *&root,int k)
    {if(root==NULL)return NULL;else if(root->data==k)return root;else if(root->data>k)return bt_search(root->rightchild,k);else return bt_search(root->leftchild,k);
    }

转载于:https://www.cnblogs.com/DJC-BLOG/p/9077646.html

数据结构-查找-折半查找-二叉排序树查找相关推荐

  1. 折半查找判定树 二叉排序树 查找成功平均查找长度 查找失败平均查找长度

    写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞加收藏呦.感激不尽!如有错误也请留言指正. 考研数据结构练习,欢迎订阅我的专辑<考研数据结构题型分类讲解练习> [哈尔滨工业大学 ...

  2. 【查找算法】二叉排序树查找法

    本篇文章将介绍二叉排序树的查找算法. 文章目录 何为二叉排序树查找? 查找算法实现 查找效率分析 二叉排序树的插入操作 二叉排序树的生成操作 二叉排序树的删除操作 何为二叉排序树查找? 上篇文章我们学 ...

  3. 线性表查找之二分查找(折半、对分查找)

    特点: 前提是对有序的一组元素进行查找 每次将待查记录所在区间缩小一半 代码: 不断的缩小范围: #include <iostream> #include <assert.h> ...

  4. “查找”学习提纲(二)——树型查找和散列查找

    文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...

  5. 数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告

    实验内容: 基本内容: 算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找: ...

  6. 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树

    七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html 学习的地址 https://www.bilibili.com/video/av278314 ...

  7. c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...

    数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...

  8. 顺序查找 折半查找 二叉排序树

    1.顺序查找,折半查找,二叉排序树操作定义 SeqSearch.h #include<stdio.h> #define ARRAYLEN 8int source[]={69, 65, 90 ...

  9. 【数据结构】折半查找及其二叉判定树画法

    折半查找又叫二分查找,是数据结构中一种很重要的查找方式. 其特点有以下几个: 只能对有序的顺序表进行查找. 是一种静态查找. 查找的平均时间复杂度为o(log2n). 成功平均查找长度ASL约log2 ...

  10. C语言数据结构顺序表的顺序查找和折半查找的功能

    C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...

最新文章

  1. cpp中sizeof与指针
  2. 小鱼儿 c语言,小鱼儿请进.
  3. Java进阶:CyclicBarrier基本使用
  4. SQLServer当数据导入平面文件
  5. Spring Cloud 版本支持
  6. oracle扩展dblink数。
  7. Java生鲜电商平台-B2B生鲜的互联网思维
  8. axis1 c# 接口 调用_java axis 调用C# webService的例子
  9. Windows Azure 云计算服务: 怎样按需选择并计算它将花费多少钱呢?
  10. Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
  11. SAS详细的下载与安装流程
  12. Java案例—学生管理系统
  13. Github emoji 表情包大全
  14. VS2010 正式版 破解方法详解
  15. ABYSS genome assemble 详细用法
  16. Kali-Hydra和Medusa密码在线破解
  17. 云计算的未来畅想(五) -- matrix(终篇)
  18. 计算机驱动程序的安装过程,u盘驱动程序安装,教您如何安装u盘驱动程序
  19. 安卓日历每日提醒_好用的安卓日历Jorte:可添加待办事项和提醒
  20. 学习方法--找书,背书,利器

热门文章

  1. 接口设计的一些小总结
  2. 浅谈 HTTPS 和 SSL -TLS 协议的背景与基础
  3. C#读取所有PC中所有进程
  4. 快速排序中Partition算法总是从右边开始查找的原因
  5. 45. 正确区分count、find、binary_search、lower_bound、upper_bound和equal_range
  6. android 控件覆盖关系,Android设置viewGroup和其子控件两者之间的焦点关系【原创】...
  7. in the java search_Java SearchRequest.indices方法代碼示例
  8. c bool 类型检查_第3篇:C/C++ 检查数字类型的最高有效位(MSB)
  9. setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
  10. python起多进程服务_python 多进程详细总结