二分查找递归实现

// 表里没有相等元素,正确二分查找写法

#include <stdio.h>

int binSearch(int a[],int n,int key)
{
	// 第一次调用时参数检查
	if(n <= 0)
		return -1;

	// 递归调用的参数检查
	if(n == 1 && a[0] != key)
		return -1;

	if(a[n/2]<key)
	{
		int index = binSearch(a+n/2,n-n/2,key);
		return index == -1 ? -1 : n/2+index;
	}
	else if(a[n/2]>key)
	{
		return binSearch(a,n/2,key);
	}
	else return n/2;
}

void main()
{
	int a[100000];
	for(int i=0;i<sizeof(a)/sizeof(int);i++)
		a[i] = i;
	int index = binSearch(a,sizeof(a)/sizeof(int),sizeof(a)/sizeof(int)-1);

	printf("index %d",index);
}

参考链接:

http://blog.csdn.net/drzhouweiming/article/details/1562717

时间: 2024-11-19 03:46:31

二分查找递归实现的相关文章

【算法拾遗】二分查找递归非递归实现

转载请注明出处:http://blog.csdn.net/ns_code/article/details/33747953 本篇博文没太多要说的,二分查找很简单,也是常见常考的查找算法,以下是递归非递归的实现. 非递归实现: /* 非递归实现,返回对应的序号 */ int BinarySearch(int *arr,int len,int key) { if(arr==NULL || len<1) return -1; int low = 0; int high = len-1; while(l

8.8 冒泡排序 选择排序 二分查找 递归使用

冒泡排序: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100000 #define M 100000 void show_arr(int * a,int n) { int i; for(i = 0; i < n; i++) { printf("%d ",a[i]); } printf("\n"); } void init_arr(in

查找 —— 二分查找[递归+非递归]

二分查找 二分查找是对一组有序序列进行查找.根据要查找的k和序列中间元素比较,动态的移动查找范围.以对折的方式缩小查找范围. 递归方式: def binarySearch(A,left,right,k): if left<= right: mid =(left+right)//2 if A[mid] == k: return mid if A[mid]>k: return binarySearch(A,left,mid-1,k) #此处要返回函数运行结果而不是仅仅调用函数 else: retu

二分查找递归版以及书写递归的注意事项

采用递归的方法实现二分查找. 在一个有序数组list中,从下标1开始,查看target是否在数组中.在的话就返回下标,否则返回0. 思路 1.对线性表排序,通常是由小到大排序. 2.取中间值与目标值比较. 2.1取中间值与目标值比较,若相等,则返回下标,退出函数. 2.2中间值比目标值要大,那么在最小值和中间值之间继续查找,执行2. 2.3中间值比目标值要小,那么在最大值和中间值之间继续查,执行2. 第一版(错误) int recursive_bin_ser(int* list, int len

二分查找*递归*与*非递归

二分查找感觉还是挺简单的,我写的这程序是处理有序表的查找,主要思想是这么回事:已知元素个数,找到位于中间元素的值a[mid],并与要找的value比较,如果大于,那么就从0到mid-1中继续查找. 要考虑的问题,如果元素个数为0,数组中没有要查找的元素,还有找到元素怎么返回. #include<cstdio> #include<algorithm> #include<iostream> using namespace std; #define MAX 1000 int

二分查找——递归

今天的程序,自己编的,感觉六六的,么么哒(づ ̄ 3 ̄)づ 题目:在数组中查找书a的位置 #include<stdio.h>int b[10]={1,1,2,3,3,5,6,6,7,9},a;-------------------------------------//定义两个全局变量int  erfen(int x,int y){ int o; if(x>y) return 0;-------------------------------------------------------

JAVA学习笔记----二分查找递归

public class Main{     public static int rank(int key, int[] a){         return rank(key,a, 0 ,a.length -1 );     }     public static int rank(int key, int[] a, int lo , int hi){         if (lo > hi){System.out.println(" 找不到 ");return -1;}   

算法前戏 递归 二分查找 列表查找

一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略时,必须有一个明显的结束条件,称为递归出口.问题规模相比上次递归有所减少, ③递归算法解题通常显得很简洁,但递归算法解题的效率较低.所以一般不倡导使用递归算法设计程序. ④在递归调用的过程当中系统的每一层的返回点.局部变量等开辟了栈来存储.递归函数次数过多容易造成栈溢出等. 所以一般不倡导用递归算法

数据结构&amp;算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)

什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): if x==0: print("我的小鲤鱼",end='') else: print("抱着",end='') func(x-1) print("的我",end="") func(5) 递归示例一:我的小鲤鱼 ''' 1 1 2 3 5 8 13 21 34 输出长度为 n