`
civili
  • 浏览: 23860 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

二分查找法(迭代和递归实现)

 
阅读更多
int search(int array[], int n, int v) {
    
    int left, right, middle;
    left = 0, right = n - 1;

    while (left <= right) {
        middle = (left + right) / 2;
        if (array[middle] > v) {
            right = middle - 1;
        } else if (array[middle] < v) {
            left = middle + 1;
        } else {
            return middle;
        }
    }

    return -1;
}

int search_recurse(int array[], int low, int high, int v) {
    int middle;

    middle = (low + high) / 2;

    if (low < high) {
        if (array[middle] > v) {
            return search_recurse(array, low, middle, v);
        } else if (array[middle] < v) {
            return search_recurse(array, middle + 1, high, v);
        } else {
            return middle;
        }
    } else if (low == high) {
        if (array[middle] == v) {
            return middle;
        } else {
            return -1;
        }
    } else {
        return -1;
    }

    return -1;
}

int main(int argc, char *argv[]) {
    int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 13, 19};
    int m = search(array, sizeof(array)/sizeof(array[0]), 13);
    printf("m = %d\n", m);
    m = search_recurse(array, 0, sizeof(array)/sizeof(array[0]), 13);
    printf("m = %d\n", m);

    return 0;
}

 

分享到:
评论

相关推荐

    二分查找算法C++,递归和迭代

    cout二分查找法,请输入数列个数\n"; cin&gt;&gt;n; for(i=0;i;i++) cin&gt;&gt;a[i]; while(true) { cout请输入要查找的数:"; cin&gt;&gt;num;//读入要查找的数 //find=binarySearch(a,0,n-1,num); find=...

    迭代与递归算法

    牛顿迭代法通常比二分查找等其他方法更快地收敛到根,但在某些情况下可能不收敛或收敛速度慢。 **递推法**是另一种解决问题的方法,它通过定义一个序列的后一项与前一项之间的关系来解决问题。递推法在处理动态规划...

    递归算法和二分查找法

    递归算法是一种编程技术,它的核心在于一个函数或过程通过调用自身来解决问题。递归的概念可以通过一个生动的...因此,在编写递归算法时,应合理设计递归深度,优化递归过程,或考虑使用非递归的迭代方法来提高效率。

    采用二分查找法和顺序查找法查找元素的下标

    本主题主要关注两种常见的查找方法:顺序查找法和二分查找法。这两种方法在不同的场景下各有优势,理解并能熟练运用它们对于优化程序性能至关重要。 首先,我们来讨论顺序查找法。这种方法是最基础的查找策略,适用...

    二分查找最简单教程

    二分查找的实现可以分为两种形式:迭代和递归。迭代形式通过循环来实现查找,而递归形式则是通过函数调用自身来实现。迭代形式通常在空间复杂度上更优,因为它不需要额外的栈空间。 二分查找的应用不仅限于查找元素...

    二分查找法汇总1

    无论数组是递增还是递减排列,甚至存在重复元素,都不会影响二分查找法的使用,但通常假设数组是递增且无重复元素,以便简化分析和实现。 二分查找法的实现可以分为递归和非递归两种。递归版本的二分查找法如下: ...

    用递归与迭代的方法分别实现数组的排序与查找(C语言版).doc

    在本实验中,主要涉及了两个重要的编程概念:递归和迭代,并且这些概念被应用于数组的排序(快速排序)和查找(二分查找)中。以下是对这两个关键概念及其在C语言中的实现的详细解释。 1. **递归**: 递归是一种...

    二分查找算法流程图流程图举例

    二分查找法也称为折半查找法,它是在有序数组中进行查找的一种高效方法。这种方法利用了数组有序的特点,通过不断将查找区间对半分割来减少搜索范围,从而显著提高查找效率。二分查找的时间复杂度为O(logn),这使得...

    python二分查找算法的递归实现方法

    除了递归实现外,二分查找还可以通过迭代的方式实现。递归版本虽然代码简洁易懂,但在某些情况下可能会导致栈溢出。相比之下,迭代版本在空间效率上更优,但实现相对复杂一些。 #### 五、总结 本文详细介绍了如何...

    折半查找法,也称为二分查找法.pdf

    折半查找法,又称二分查找法,是一种在有序数组中高效寻找目标值的算法。其核心思想是利用数组的有序性,通过不断缩小搜索范围,以递归或迭代的方式快速定位目标值。该方法特别适合于大规模数据的查找,因为它的平均...

    快速排序对数组排序,二分查找。

    在C实现中,快速排序通常会使用递归函数,而二分查找可以写成迭代或递归的形式。结合快速排序和二分查找,可以先使用快速排序将数组排序,然后在需要查找元素时使用二分查找,这样可以大大提高查找效率,因为快速...

    C++ 数据结构 二分查找实验

    本演示程序用VC6.0编写,完成递归版本和迭代版本的二分查找的实现

    实验2 二分检索的递归与迭代算法设计.doc

    本实验报告的主要目的是通过设计和实现二分检索的递归和迭代算法,熟悉二分检索问题的线性结构表示和二分检索树表示,并掌握将递归算法转换成迭代算法的方法。 一、实验目的: 1. 熟悉二分检索问题的线性结构表示...

    busca-binaria-iterativa-recursiva:C 中的算法执行迭代或递归二分查找;

    在本项目"busca-binaria-iterativa-recursiva"中,提供了两种在C语言中实现二分查找的方法:迭代和递归。 ### 迭代二分查找(busca_iterativa) 迭代法是一种自底向上的编程方式,通过循环结构逐步逼近目标。在...

    编程之-迭代法

    例如,二分查找算法就是一种迭代过程,通过不断缩小搜索范围来找到目标元素。同样,图的深度优先搜索(DFS)和广度优先搜索(BFS)也可以用迭代实现,尽管在某些编程语言中,DFS可以自然地用递归表示。 在软件开发...

    经典算法 链表 二分查 STLtree

    在“2进制算法.txt”中,可能会涉及二分查找在数组或者链表上的实现,包括递归和迭代两种方式。二分查找的时间复杂度为O(log n),显著快于线性查找。 接下来,STL中的tree容器,通常指的是红黑树,是一种自平衡的...

    PHP二分查找算法的实现方法示例

    在给定文件中,详细介绍了在PHP中如何使用循环和递归两种方法来实现二分查找算法。 在循环实现中,算法首先确定数组的起始位置和结束位置,并通过计算得到数组中间的位置。接着使用while循环不断对数组进行二分查找...

    算法设计—递归实验报告

    同时,BSearch1和BSearch2则是二分检索算法的递归和迭代实现,用于在一个无序的整数数组中查找特定元素。 在树结构部分,实验涉及到了二分检索树的插入和查找操作。InsertBT函数用于在二分检索树中插入一个新元素,...

    计算器程序 利用迭代法可以求出某个实数的平方根,利用递归的方法可以求出某个整数的阶乘。

    在求平方根的过程中,迭代法通常基于牛顿法(Newton's Method)或二分查找(Binary Search)等算法。例如,对于求解 x 的平方根 sqrt(x),我们可以初始化一个近似值 y,然后不断更新它,直到达到足够的精度: y = ...

    数据结构与算法(JAVA篇)之递归算法(二)

    本文将探讨递归算法中的一个重要应用——二分查找,并对比递归与非递归两种实现方式。 ##### 递归的概念介绍 递归是一种算法设计策略,它通过将问题分解成较小的子问题来解决问题。递归算法的特点在于函数调用自身...

Global site tag (gtag.js) - Google Analytics