`
come_for_dream
  • 浏览: 120807 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

二分搜索的递归和循环实现

 
阅读更多

二分搜索,指的是对已经排好序的数据进行搜索,也叫折半查找。下面我用递归和非递归实现了这一个算法

/**
	 * 二分搜索的递归实现
	 * 
	 * @param a
	 * @param x
	 * @return
	 */
	public int BSearch(int[] a, int x) {
		int left = 0, right = a.length - 1;

		return search(a, x, left, right);
	}

	public int search(int[] a, int x, int left, int right) {

		int mid = (left + right) / 2;
		
		if(left>right){
			return -1;
		}

		if (a[mid] == x) {
			return mid;
		}

		if (a[mid] > x) {
			return search(a, x, left, mid - 1);
		}

		else
			return search(a, x, mid + 1, right);

	}

	/**
	 * 二分搜索的循环实现
	 * 
	 * @param a
	 * @param x
	 * @return
	 */
	public int search(int[] a, int x) {
		int left = 0, right = a.length - 1;
		for (; left <= right;) {
			int mid = (left + right) / 2;
			if (a[mid] == x)
				return mid;
			if (a[mid] > x) {
				right = mid - 1;
			} else
				left = mid + 1;
		}
		return -1;

	}

 

分享到:
评论

相关推荐

    二分搜索的递归和非递归实现

    本篇文章将详细探讨二分搜索的递归和非递归实现。 首先,我们来看递归实现的二分搜索。递归是一种解决问题的方法,它将问题分解为更小的子问题,直到子问题可以直接解决。在二分搜索中,递归实现通常分为以下几步:...

    分别用递归和非递归方法实现二分查找算法 的完整程序

    分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。

    折半(二分)查找的c++代码(递归和非递归)实现

    在C++中,这两个实现可能分别对应于`二分查找递归代码.cpp`和`二分查找非递归代码.cpp`中的内容。在实际应用中,根据具体场景和性能需求,可以选择合适的实现方式。需要注意的是,二分查找的前提是输入数组必须是...

    快排与二分检索递归与非递归

    快速排序(Quick Sort)与二分查找...综上所述,快速排序和二分查找是两种基础且实用的算法,它们的递归和非递归实现各有特点。理解并掌握这两种算法及其不同实现方式,对于提升编程技能和解决实际问题具有重要意义。

    递归算法和二分查找法

    递归的实现依赖于一个称为递归工作栈的数据结构。递归过程分为两部分: 1. 递推(Traversal):问题向更小的子问题推进,这个阶段相当于将状态压入栈中。 2. 回归(Backtracking):通过解决子问题最终回到原始问题...

    Python3实现非递归二分查找

    总的来说,这个资源提供了Python3实现非递归二分查找的例子,以及相关的单元测试,帮助学习者理解并实践这一高效搜索算法。通过学习和应用这种算法,开发者可以更好地处理大数据集的搜索问题,提升代码的效率。同时...

    C语言数据结构中二分查找递归非递归实现并分析

    非递归实现的二分查找算法可以使用while循环来实现。其基本思路是:首先确定查找的范围,然后不断缩小查找的范围,直到找到目标元素或查找范围为空。下面是非递归实现的二分查找算法的示例代码: ```c int binaty_...

    js 递归json树实现根据子id查父id的方法分析

    对于未知层级的树状数据,用for循环是无法实现的,因为不知道要循环几层,那么最合适的方法就是用js递归 界面结构: json数据: orgTreeData:{ nodeId:19A5B, nodeName:预分析用户:1313.85万人, nodeType:root...

    插入、查找和删除函数用非递归的方式实现

    本主题聚焦于如何使用非递归方法实现这些功能,这通常能带来更好的性能和更低的内存消耗。 **插入函数** 插入函数的主要任务是在适当的位置插入一个元素到已有的数据结构中。常见的数据结构如数组、链表、栈、队列...

    递归算法与循环算法的分析

    递归算法与循环算法的分析 递归算法是指在程序设计中,在调用一个函数...8. 递归算法和循环算法在二分查找算法中的应用:递归算法和循环算法的时间复杂度都为 O(logn),但是循环算法的空间复杂度较低,且更容易实现。

    C 二分查找 递归与非递归的实现代码

    在给定的代码中,提供了三种C语言实现二分查找的方法:递归和非递归。 1. **递归实现**: - `binSearch` 函数是递归版本的二分查找。它首先计算中间索引`mid`,然后根据`arr[mid]`与`key`的比较结果进行递归调用。...

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

    在Python中,二分查找可以采用循环或递归的方式来实现。以下是基于递归的二分查找算法的实现方法: 首先,我们需要理解递归的基本概念。递归是指一个函数在其定义中调用自身的过程。在二分查找中,我们将问题分解为...

    循环赛日程表(分治递归法)

    循环赛日程表是计算机科学中一种常见的问题,它涉及到分治递归策略的应用。在循环赛中,每个参赛者都要与其他所有参赛者比赛一次,安排这样的赛程表需要巧妙的算法设计。在这个问题中,我们可以用递归和分治的思想来...

    Java,二分查找,递归以及非递

    在Java中实现二分查找,我们可以采用递归或非递归两种方式。以下是对这两种方法的详细介绍: 1. **递归实现**: 递归方法通常更具概念性,它将问题分解为更小的子问题,直到达到基本情况。对于二分查找,我们首先...

    C语言迷宫问题递归和非递归求解

    然后实现递归或非递归函数,包括搜索逻辑和边界检查。 - 记得在每次移动后更新状态,避免回环和死循环。 总的来说,C语言中的迷宫问题提供了一个实践数据结构和算法的好机会,无论选择递归还是非递归方法,都需要...

    快速排序的非递归实现

    然而,由于需要手动管理栈,代码复杂度相对较高,理解和实现起来可能会更加困难。 在实际编程中,非递归快速排序可能需要考虑以下优化策略: - **随机化选择基准**:为了避免最坏情况(如输入已排序或逆序),可以...

    JAVA快速排序(递归实现与非递归堆栈模拟实现)

    #### 二、非递归堆栈模拟实现的快速排序 除了递归方式外,我们还可以使用栈来模拟递归的过程,从而避免深度过大的递归调用带来的栈溢出问题。 **2.1 代码解析** ```java import java.util.LinkedList; class ...

    算法分析 二分搜索算法

    3. **实践编程能力**:编写并测试二分搜索算法的程序代码,验证其正确性和效率。 ### 算法分析 二分搜索的基本步骤如下: 1. 将待搜索的有序数组分为两半,计算中间索引`middle`。 2. 比较中间元素`a[middle]`与...

    一维数组的快速排序以及查找(递归迭代分别实现)

    根据给定文件的信息,本文将围绕“一...递归实现更易于理解和实现,而迭代实现则更适用于内存受限的情况,能够有效减少递归调用带来的栈空间消耗。掌握这两种实现方式对于提高算法的设计能力和编程技巧都是非常有益的。

    c++实现二分搜索算法分析与设计分治算法

    C++中实现二分搜索,首先需要定义一个函数,接收排序好的数组、目标值、以及搜索范围的开始和结束索引作为参数。初始时,搜索范围为整个数组。然后,在循环中不断将搜索范围减半,直到找到目标值或搜索范围为空。...

Global site tag (gtag.js) - Google Analytics