`
pleasetojava
  • 浏览: 729332 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

折半查找的c++模板递归和迭代实现

阅读更多

本文属借鉴他人之作,稍作修改:

折半查找法也称为二分查找法,采用分治策略,可以以O(log n)完成搜索任务,条件就是数组有序。

算法思想:

将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。

平时我们看到的都是迭代实现,很少有人去递归,这里给出一个递归的实现。

递归实现:

  1. template<classKey>
  2. intbinary_search(const Key*r,constint&low,constint&high,constKey&k)
  3. {
  4. intmid=(low+high)/2;
  5. if(low<high)
  6. {
  7. if(k<=r[mid])
  8. binary_search(r,low,mid,k);
  9. else
  10. binary_search(r,mid+1,high,k);
  11. }
  12. elseif(low==high)
  13. {
  14. if(k==r[mid])
  15. returnlow;
  16. else
  17. return-1;
  18. }
  19. else
  20. return-1;
  21. }

再给一个迭代的,也就是我们平时很经常用到的。

迭代实现:

  1. template<classKey>
  2. intbinary_search(const Key*r,constint&size,constKey&k)
  3. {
  4. intlow=0,high=size-1,mid;
  5. while(low<high)
  6. {
  7. mid=(low+high)/2;
  8. if(k>r[mid])
  9. low=mid+1;
  10. else
  11. high=mid;
  12. }
  13. if(low>high)
  14. return-1;
  15. else
  16. {
  17. if(k==r[low])
  18. returnlow;
  19. else
  20. return-1;
  21. }
  22. }

分享到:
评论

相关推荐

    折半查找算法

    - **空间复杂度**:由于采用了递归或迭代的方式实现,没有使用额外的空间,所以空间复杂度为 O(1)。 #### 五、应用场景 折半查找适用于对已排序的数组或列表进行高效查找。常见的应用场景包括但不限于: - 在...

    zhebanchazhao.rar_折半查找

    迭代通常更节省内存,而递归在理解和实现上可能更为直观。 ### 折半查找的时间复杂度和空间复杂度 - **时间复杂度**:由于每次查找都使搜索范围减半,折半查找的时间复杂度为O(log n),其中n是数组中的元素数量。...

    07.递归的折半查找.wmv(目前数据结构最好的视频,共42集,需要哪一集的知识自己下,一集3积分)

    01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15链表 16链表的迭代器 17循环链表 18...

    用C++实现的冒泡排序和折半排序

    冒泡排序通常使用嵌套循环实现,而折半排序则涉及递归或迭代的逻辑。在提供的文件"0613042098"中,可能包含了具体的C++代码示例,你可以通过阅读和分析这些代码来深入理解这两种排序方法的实现细节。 学习和掌握...

    05.折半查找.wmv(C++实现 数据结构与算法视频教程(目前上传最好的视频))

    01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15链表 16链表的迭代器 17循环链表 18...

    C++递归函数ppt课件.ppt

    本资源是关于C++递归函数的ppt课件,介绍了递归函数的概念、设计方法步骤、执行过程、递归与迭代、典型案例等内容。下面是对该资源的详细解释: 递归概念 递归函数是指通过函数或过程调用自身,将问题转化为本质...

    查找和排序的各种C++ 实现,归并,冒泡,快速,选择

    C++中,折半查找通常采用迭代方式实现,时间复杂度为O(log n)。 以上算法在实际编程中有着广泛的应用。例如,在大型数据库系统、操作系统内核、数据分析等领域,都需要高效地处理和排序数据。理解并掌握这些基本...

    C++数据结构线性表及相关查找排序算法

    在C++中,我们可以利用二分查找的递归或迭代方式实现。 排序算法是数据处理的关键部分。简单选择排序是一种基础的排序算法,它通过反复交换找到的最小(大)元素与未排序部分的首元素来排序。尽管效率较低,但在...

    04.顺序查找.wmv(C C++实现 数据结构与算法视频教程(目前上传最好的视频))

    01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15链表 16链表的迭代器 17循环链表 18...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    ◆ 详细介绍了数据抽象,强调规范和实现之间的区别 ◆ 广泛介绍了各种面向对象的编程技术 ◆ 重点是核心的数据结构,而不是非必要的C++语言语法 ◆ 说明了类和ADT在问题解决过程中的作用 ◆ 诠释了ADT的主要...

    二分查找的实现

    二分查找,也称为折半查找,是一种在有序数组中搜索特定元素的高效算法。它的基本思想是将数组分成两半,然后比较中间...理解并掌握二分查找的原理和实现方式,对于提升编程能力,特别是解决搜索问题,是非常有帮助的。

    C++程序二分查找源码

    在C++中实现二分查找,可以使用迭代或递归的方式。迭代版本通常更简洁,而递归版本则更直观。从提供的压缩包中的“二分查找”文件名来看,源代码可能包含了这两种实现方式的示例。在实际编程中,应根据具体需求选择...

    06.什么是递归.wmv(目前数据结构最好的视频,共42集,需要哪一集的知识自己下,一集3积分)

    01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15链表 16链表的迭代器 17循环链表 18...

    江苏二级C++常考算法

    在深入探讨具体的算法之前,我们先来复习一下C++的基础知识,这些是理解和实现算法的重要前提。 1. **数据类型**:熟悉C++中的基本数据类型(如`int`、`float`、`double`等)及其范围。 2. **变量与常量**:掌握...

    C++完美实现一元三次方程求解

    二分法,又称折半查找法,是一种在有序数组中查找特定元素的搜索算法。在解决一元三次方程时,我们可以将它应用于连续函数的零点查找。因为一元三次方程的实数解对应于其导数的零点,我们可以通过二分法逐步缩小搜索...

    二分查找的C实现

    2. **递归实现**:二分查找也可以用递归方式实现,虽然在大多数情况下迭代版本更高效,但递归代码通常更简洁易懂。 3. **搜索范围的调整**:在某些情况下,可以考虑在找到目标值附近时减小步长,提高查找效率。 4. *...

    吉林大学软件学院2011数据结构实验题C++实现

    2) 实现二叉查找树的查找、插入和删除等算法; 第三次实验 题目1 邻接表存储的图相关算法的实验验证。 [实验目的] 验证邻接表存的图及其上的基本操作。 [实验内容及要求] 1、 定义邻接表存储的图类。 2、 实验验证...

    二分法查找

    - **递归与迭代**:二分查找可以使用递归或循环两种方式实现,但考虑到递归可能导致栈溢出,一般推荐使用迭代实现。 - **精度问题**:对于浮点数数组,由于精度限制,直接比较可能不准确,需采取适当的策略,如设定...

    16.链表的迭代器.wmv(目前数据结构最好的视频,共42集,需要哪一集的知识自己下,一集3积分)

    01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15链表 16链表的迭代器 17循环链表 18...

Global site tag (gtag.js) - Google Analytics