简单二分查找和递归的思想

      递归是一种重要的编程思想,在学习数据结构时,经常用到递归的思想。就是让函数在一定条件下不断的调用自己,从而求解。思考起来逻辑更为简单,代码更加简洁,但是也容易出现死循环,并且代码的扩展性和可读性不好。今天我写了二分查找的递归算法和非递归算法。

     二分查找是用来从一个有序数组中查找某一个值是否存在,我们拿需要查找的值和数组的中间值不断的比较,以升序数组为例,如果查找的值大于数组中间的值,则要查找的值在中间值的右边,如果查找的值小于数组中间值,那么则在数组的左边进行查找。

   递归算法实现二分查找:


    参数分别为 数组 起始下标  末尾数字的下标 和要查找的数, 这里要注意只要我们每次起始值小于或者等于结束值,说明我们的数组还没有遍历完,我们就继续查找。

	public static int getKey(int a[], int start, int end, int key) {
		int mid = (start + end) / 2;
		while (start <= end) {
			if (a[mid] == key) {
				return a[mid];
			} else if (a[mid] < key) {
				return getKey(a, mid + 1, end, key);
			} else if (a[mid] > key) {
				return getKey(a, start, mid - 1, key);
			}
		}
		return -1;
	}

非递归实现二分查找:

public static int getKeyByFor(int []a,int start,int end,int key)
	{
		int mid = (start+end)/2;
		while(start<=end){
			if(a[mid]==key)
			{
				return a[mid];
			}
			else if(a[mid]<key)
			{
				start=mid+1;
				mid = (start+end)/2;
			}
			else if(a[mid]>key)
			{
				end = mid-1;
				mid = (start+end)/2;
			}
		}
		 return -1;
	}

测试代码:

	public static void main(String[] args) {
		int[] a = { 1, 2, 3, 4 };

		System.out.println(getKey(a, 0, a.length - 1, 3));
		System.out.println(getKeyByFor(a, 0, a.length-1, 4));
	}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值