Java二分查找算法实现

Java二分查找算法实现

二分法简介:
二分法算法也叫折半查找,是一种在有序数列里查找某个特定的元素的算法。如果要查找的元素在这个列表当中,二分查找获取元素位置,否则返回null。

思路:
假如有一个有序数组的元素有1到10,我要查找8这个数的数组的下标。
二分法就会获取这个数组的中间值,查看是否跟查找的这个值相同。相同的话就直接返回这个值,大于的话就在中间值跟最大值之间找。再在这个范围内执行同样的操作。直到找到的元素等于查找的元素就返回这个元素的下标。

过程



代码可以分为使用递归的方法和不使用递归的方法。
代码:


public class Erfen {
//	不用递归的二分法
	public static int bbb(int[] arr,int key ){
		int left = 0;//定义左值
		int right = arr.length -1;//定义右值
		if (left >=right) {//当左值大于右值提示报错
			return -1;
		}
		
		while (left <= right) {
			int a = (left + right)/2;//取中间值
			if(key == arr[a])//等于特定元素返回下标
				return a;
			if(key >=arr[a])//大于左值等于中间值加1(加1因为中间值已经比较过了)
				left = a + 1;
			else否则右值等于中间值减1
				right = a - 1;
		}
		return -1;//运行完啦还没有找到这个数就报错。
	}
	
//	使用递归的二分法
	public static int aaa(int[] arr,int left,int right,int key ){
		if (key>arr[right]||key<arr[left]||right<left) {//满足这些情况就报错
			return -1;
		}
		int a = (left+right)/2;//找到中间值
		if(arr[a]>key){//中间值元素大于特定元素就重新进入方法,右值替换中间值减一
			return aaa(arr,left,a-1,key);
		}else if(arr[a]<key){//中间值元素小于特定元素就重新进入方法,左值替换中间值加一
			return aaa(arr,a+1,right,key);
		}else{//否则返回中间值
			return a;
		}
	}
	
	
	public static void main(String[] args) {
		//定义数组
		int[] a = {1,2,3,4,5,6,7,8,9,10};
		//使用递归二分法
		int b = aaa(a,0,a.length-1,8);
		//使用二分法
		int c = bbb(a,8);
		System.out.println(a[b]);
		System.out.println(a[c]);
		
	}

}

运行结果:
结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值