二分查找的递归与非递归算法

/*
二分查找的递归与非递归算法
*/
#include <iostream>
#include <cstdio>
using namespace std;

bool bisrch( int low,int high,int v,int *text ) //递归写法
{
    int i,mid;
    mid=( low+high )/2;
    if( low>high ) return false;
    if( v==text[mid] )  return true;
    else if( v<text[mid] )  return bisrch( low,mid-1,v,text );
    else return bisrch( mid+1,high,v,text );
}

bool bisrch1( int low,int high,int v,int *text ) //非递归写法
{
    int i,mid;
    while( low<=high )
    {
        mid=(low+high)/2;
        if( text[mid]==v )  return true;
        else if( v<text[mid] ) high=mid-1;
        else low=mid+1;
    }
    return false;
}

int main()
{
    int text[10];
    int i;
    for( i=0;i<10;i++ )
        text[i]=i;
    cout<<"递归写法:"<<endl;
    for( i=0;i<20;i++ )
    {
        if( bisrch(0,9,i,text) ) cout<<"FOUND!"<<endl;
        else cout<<"NOT FOUND!"<<endl;
    }
    cout<<"非递归写法:"<<endl;
    for( i=0;i<20;i++ )
    {
        if( bisrch1(0,9,i,text) ) cout<<"FOUND!"<<endl;
        else cout<<"NOT FOUND!"<<endl;
    }
    return 0;
}

  

二分查找的递归与非递归算法

时间: 2024-10-12 11:01:29

二分查找的递归与非递归算法的相关文章

二分查找(递归与非递归)

递归的二分查找: 1 int search(int *a, int target, int p, int r) 2 { 3 if (p <= r) 4 { 5 int mid; 6 7 mid = (p + r) / 2; 8 if (*(a + mid) == target) 9 return 1; 10 else if (*(a + mid) > target) 11 return search(a, target, p, mid - 1); 12 else 13 return searc

二分查找的递归和非递归写法

一.概述 二分查找是针对有序数列的,对无序数列是无效的,在有序序列中使用二分查找能大大提高查找效率,通常能将时间按复杂度从O(n)降至O(logn). 二.查找某数的位置(或存在性) 递归: 1 //返回"-1"表示为找到 2 //否则返回目标的下标(若有多个,只是其中一个) 3 int binary_searchs(int *arr, int target, int l, int r) 4 { 5 if (l > r) return -1; 6 int mid = (l + r

二分查找(递归和非递归实现)

当然前提是:有序数列,这里以升序为例! public class binarySearch { public static void main(String[] args) { int arr[]={1,2,3,4,5,6,7,8,9}; int key=9; //int result=binarySearchMethod_noDiGui(arr,key);//非递归实现 int result=binarySearchMethod_DiGui(arr,0,arr.length-1,key);//

二叉树的前序、中序、后序遍历的递归和非递归算法实现

1 /** 2 * 二叉树的前序.中序.后序遍历的递归和非递归算法实现 3 **/ 4 5 //二叉链表存储 6 struct BTNode 7 { 8 struct BTNode *LChild; // 指向左孩子指针 9 ELEMENTTYPE data; // 结点数据 10 struct BTNode *RChild; // 指向右孩子指针 11 }; 12 13 /** 14 * 前序遍历 15 **/ 16 // 递归实现 17 void PreorderTraversal(BTNo

二叉树的三种遍历的递归与非递归算法

今天复习了一下二叉树的前序遍历.中序遍历.后序遍历的递归与非递归算法,顺便记录一下: //TreeTest.h #include <iostream> struct TreeNode { int value; TreeNode* leftChild; TreeNode* rightChild; void print() { printf("%d ",value); } }; class MyTree { private: TreeNode* m_root; TreeNode

快速排序(递归及非递归算法源码)

1. 递归算法: quicksort.cpp #include <iostream>using namespace std; void Swap(int a[],int i,int j){ int temp=a[i]; a[i] = a[j]; a[j] = temp;}int Partition(int a[],int low, int high){ int pivot=a[low]; while(low<high) { while(low<high && a[h

迷宫寻址中深度优先搜索的递归和非递归算法比较

巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 本文只探究迷宫寻址中深度优先搜索的递归和非递归算法比较,其他相关代码详见<迷宫问题(巧若拙)>http://blog.csdn.net/qiaoruozhuo/article/details/41020745 深度优先搜索的递归算法是很容易实现的,只需设置一个驱动函数,然后递归调用子函数就可以了. 代码如下: int DeepSearchWay()//寻找路径:深度搜索 { CopyMiGong

斐波那契数与二分法的递归与非递归算法及其复杂度分析

1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加.特别指出:0不是第一

(续)二分查找(不用递归)

接着上一篇,其实不用递归进行二分查找也很简单,当时咋就没想起来呢.. OK废话少说, show me the code 1 #include <stdio.h> 2 3 int binary_search_no_recursion(int a[], int left, int right, int key){ 4 while(left<=right){ //attention!!! 5 int mid = (left+right)/2; 6 if(key > a[mid]) 7 l