查找无序数组的某个值(递归方法实现&&二分查找(递归 非递归))

查找无序数组的某个值(递归方法实现)

#include <stdio.h>
#include <stdlib.h>

using namespace std;

int Find(const int arr[],int len,int val)
{
	if(len<=0 ||arr[len-1]==val)
	{
		return len-1;
	}
	else return Find(arr,len-1,val);
}
int FindValue(const int arr[],int len,int val)
{
	//循环1
	/*
	if(len<=0)
	{
		return -1;
	}
	int pos=-1;
	for(int i=0;i<len;i++)
	{
		if(val==arr[i])
		{
			pos=i;
			break;
		}
	}
	return pos;
	//循环2
	if(len<=0)
	{
		return -1;
	}
	int i=len-1;//数组最后一个值的下标
	while(i>0 && arr[i]!=val)
	{
		--i;
	}
	return i;
	
	//递归 
	if(len<=0)
	{
		return -1;
	}
	else
	{
		if(arr[len-1]!=val)//len-1为数组最后一个元素
		{
			return FindValue(arr,len-1,val);
		}
		return len-1;
	}
	*/
	if(NULL==arr || len<0)
	{
		return -1;
	}
	else
	{
		return Find(arr,len,val);
	}
}


int main()
{
	int arr[]={12,52,34,90,45,23,56,100,101};
	int len=sizeof(arr)/sizeof(int);

	int val=45;

	int pos=FindValue(arr,len,val);
	printf("%d \n",pos);


	return 0;
}

查找无序数组的某个值(二分查找实现)

int FindValue(const int arr[],int len,int val)
{
	//安全性问题
	if(NULL==arr || len<1)//判断数组越界
	{
		return -1;
	}
	int left=0;
	int right=len-1;

	while(left<=right)//这块是<=
	{
		//int mid=(left+right)/2;//0 1 2 3 4 5 6 7 8 9
		int mid=(right-left+1)/2+left;
		if(val<arr[mid])
		{
			right=mid-1;
		}
		else if(val>arr[mid])
		{
			left=mid+1;
		}
		else if(val==arr[mid])
		{
			return mid;
		}
	}
	return -1;
}

查找无序数组的某个值(二分查找递归实现)

int Find(const int arr[],int left,int right,int val)
{
	if(left<0)	return -1;
	int mid=(right-left+1)/2+left;
	if(arr[mid]==val)
	{
		return mid;
	}
	else if(val>arr[mid])
	{
		return Find(arr,mid+1,right,val);
	}
	else if(val<arr[mid])
	{
		return Find(arr,left,mid-1,val);
	}
	
}
int FindValue(const int arr[],int len,int val)
{
	int pos = -1;
	if(NULL==arr || len<1)//判断数组越界
	{
		return pos;
	}
	else return Find(arr,0,len-1,val);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值