二分法的递归与非递归实现

把学习过程中遇到的一些问也慢慢开始总结起来,主要也是一些好的代码、解题思路。
二分法的递归与非递归解法。
二分法要求有序,并且连续存放。
为什么要要求有序呢???
		因为二分查找是建立在比较的基础上的,通过比较来缩小范围。

递归与非递归的代码。

#include <stdio.h>
#define MAXSIZE 10 
typedef struct LNode *list;
struct LNode{
	int Element[MAXSIZE];
	int length;     //存储元素的个数 
}; 

int BinarySearch(list l,int num);
int BinarySearch2(list l,int num,int left,int right); 


int main(){
	int i,num,index;
	list l;
	l=(list)malloc(sizeof(struct LNode));
	l->length=MAXSIZE;
	for(i=0;i<l->length;i++){
		l->Element[i]=i+1;
	}
	
	scanf("%d",&num);
	//index=BinarySearch(l,num);
	index=BinarySearch2(l,num,0,l->length-1); 
	printf("index:%d",index);
}

//非递归实现 
int BinarySearch(list l,int num){
	int mid,left,right,notFind;
	
	left=0;
	right=l->length-1;
	notFind=-1;
	while(left<=right){
		mid=(left+right)/2;
		if(l->Element[mid]>num)	{
			right=mid-1;	
		}else if(l->Element[mid]<num){
			left=mid+1;
		}else{
			return mid;
		}
	}
	
	return notFind;	
}

//递归实现 
int BinarySearch2(list l,int num,int left,int right){
	int mid,notFind=-1;
	mid=(left+right)/2;
	
	if(left>right){   //设置递归出口 
		return notFind;		//返回没有找到 
	}
	
	if(l->Element[mid]>num){
		return BinarySearch2(l,num,left,mid-1);
	}else if(l->Element[mid]<num){
		return BinarySearch2(l,num,mid+1,right);
	}else{    //找到了 
		return mid;
	}	
}

第一次发文章,如果有错误的话,欢迎指正在这里插入代码片

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值