java实现二分查找,循环和递归

顺序查询  时间复杂度O(n)

就是简单粗暴遍历每个元素,判断是否相等,返回元素在列表中的位置。

二分查找 时间复杂度O(log2  n) 以2为低n的对数

循环法

	//循环法表示二分查找
	public static int testEf(int[] a,int ins,int b,int i) {						
		int result = 0;
		int mid = (b + i) / 2;				//b表示下标下限    i表示下标上限,mid下标中值
		if(ins < a[b] || ins > a[i]) {
			return -1;
		}
		while( ins != a[mid]) {			
			if(ins < a[mid]) {
				mid = (b + i - 1) / 2 ;
				i = mid ;
			}
			else if(ins >  a[mid]){
				mid = (b + i + 1) / 2 ;
				b = mid;
			}
		}
		result =  mid;
		return result;
	}

递归法

public static int testDg(int[] a ,int ins,int low, int high) {
		int mid = (low + high)/2 ;		//low表示下标下限    high表示下标上限,mid下标中值
		if(ins < a[low] || ins > a[high]) {
			return -1;
		}
		else if(ins == a[mid]) {
			return mid;
		}
		else if(ins < a[mid]) {
			mid = (low + high - 1)/2;
			return testDg(a,ins,low,mid);
		}
		else if(ins > a[mid]) {
			mid = (low + high + 1)/2;
			return testDg(a,ins,mid,high);
		}
		return -1;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值