二分查找:非递归实现和递归实现

二分查找简介

二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序。

先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid把这个数组分为两半,前一半从下标0到mid-1,后一半从mid+1到数组最后一个元素(下标是数组长度减一)。把这个查找的元素key和数组下标为mid的元素进行比较,也就是和中间那个元素进行比较,如果比这个元素的小那么把查找范围缩小到原数组的前一半(把查找下标缩短到0到mid-1),如果比中间mid下标元素大那么范围就是后半部分(下标为mid+1到数组长度减一),这样来回反复取中间比较最后就会定位到要查找元素key的下标。

二分查找有两种实现方式

非递归实现

/**
	 * @param array 操作数组
	 * @param key 查找元素
	 * @return 元素下标
	 */
	public static int binSearch(int[] array,int key){
		int start=0;
		int mid;
		int end=array.length-1;
		while(start<=end){
			mid=(end-start)/2+start;
			if(key<array[mid]){
				end=mid-1;
			}
			else if(key>array[mid]){
				start=mid+1;
			}else{
				return mid;
			}
		}
		return -1;
	}

递归实现

/**
	 * @param array 操作数组
	 * @param key 查找元素
	 * @param start 开始下标
	 * @param end 结束下标
	 * @return 元素下标
	 */
	public static int binSearch1(int[] array,int key,int start,int end){
		int mid=(end-start)/2+start;
		if(key==array[mid]){
			return mid;
		}
		else if(start>=end){
			return -1;
		}
		else if(key>array[mid]){
			return binSearch1(array,key,mid+1,end);
		}
		else if(key<array[mid]){
			return binSearch1(array,key,start,mid-1);
		}
		return -1;
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值