`
hao3100590
  • 浏览: 131767 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

二分查找的递归和非递归

阅读更多

二分查找,这个适用于已经排序好了的数组,没有排序那就先排序,不过要根据实际的情况,要是排序代价很小,这样很好了

/**
	*2.15,在有序数组中查找,利用二分查找的方法
	*
	*/	
#include <iostream>
using namespace std;

/**
	*二分查找(也可以通过递归实现)
	*
	*/
int sort(int *a, int length, int value){
	int left = 0, right = length - 1;
	while(left <= right){
		int center = (left + right)/2;
		if(value < a[center]){
			right = center - 1;
		}else if(value > a[center]){
			left = center + 1;
		}else{
			return center;
		}
	}
	return -1;
}

//递归形式
int sort(int *a, int left, int right, int value){
	int center = (left + right)/2;
	//异常时的检测
	if(left == right && a[center] != value) return -1;
	//递归查找
	if(value > a[center]) sort(a, center+1, right, value);
	else if(value < a[center]) sort(a, left, center-1, value);
	else return center;
}

int main(){
	int a[10] = {2,4,5,6,8,12,32,45,55,65};
	cout<<"列表:"<<endl;
	for(int i=0; i<10; i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
	int v;
	cin>>v;
	cout<<"在位置:"<<sort(a, 10, v)<<endl;
	cout<<"递归在位置:"<<sort(a, 0,9, v)<<endl;
}
 
分享到:
评论

相关推荐

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

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

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

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

    递归和非递归二分查找(C语言)

    用C语言开发的递归和非递归二分查找算法,具体内容详见代码

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

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

    二分查找的递归与非递归实现(java版)

    二分查找的递归与非递归实现(java版)

    Java实现二分查找的递归和非递归算法

    Java实现二分查找的递归和非递归算法

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

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

    Python3实现非递归二分查找

    非递归的二分查找可以更有效地利用系统栈,避免了递归带来的额外开销。 在Python3中实现非递归二分查找,首先需要一个已经排序的列表。以下是实现该算法的关键步骤: 1. 初始化查找范围:设置查找区间的左右边界,...

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

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

    折半查找的递归与非递归算法

    **折半查找(二分查找)算法** 折半查找,又称二分查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两个部分,每次比较中间元素与目标值,根据比较结果缩小搜索范围。如果中间元素等于...

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

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

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

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑...

    递归算法和二分查找法

    3. 设计容易:对于递归定义的问题或数据结构,设计递归算法可能比非递归算法更为简单。 递归的实现依赖于一个称为递归工作栈的数据结构。递归过程分为两部分: 1. 递推(Traversal):问题向更小的子问题推进,这个...

    C++ 中二分查找递归非递归实现并分析

    C++ 中二分查找递归非递归实现并分析 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。 ...

    折半查找的递归算法

    折半查找(也称为二分查找)是一种高效的查找算法,适用于有序数组。通过不断将查找区间对半分割,可以快速定位目标值的位置,时间复杂度为O(log n),其中n是数组长度。本文将详细介绍如何使用递归方法实现折半查找...

    C++二分查找代码(递归+非递归)

    这是一个二分查找的C++代码,其中有两个函数,是递归和非递归,array数组没有输入,默认为array[1] = 1, array[2] = 2......array[n] = n,欢迎大家来改编程序~ 参考:...

    二叉树的创建,非递归遍历和二分查找树

    二叉树是一种特殊的树结构,每个节点最多有两...以上是对二叉树、非递归遍历和二分查找树的基本介绍,具体实现细节会根据实际需求和优化策略有所不同。在实际编程中,还需要考虑错误处理、内存管理以及可能的性能优化。

    算法分析与设计-实验二 二分查找实验报告.docx

    总的来说,通过这个实验,学生可以掌握分治算法的设计思路,了解二分查找的基本原理和实现方式,无论是非递归还是递归。此外,这个实验也强调了数据预处理的重要性,即在使用二分查找前需要确保数据已排序。通过编写...

Global site tag (gtag.js) - Google Analytics