Java实现二分算法的查找

本文详细介绍了二分查找算法的基本要求、工作原理及其实现方式,包括循环和递归两种方法,适合初学者理解并掌握二分查找的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二分查找要求:

1.必须是顺序结构

2.必须是大小有序排列

2.原理:

将数组分为3部分,分别是中值前,中值,中值后(所谓的中值是指数组中间的那个数);将想要查找的数先和中值对比。若小于中值,则在中值前面找;若大于中值,则在中值后面找;等于中值,则返回。依次递归继续完成将中值的前半部分和后半部分的分解查找

3.分别有循环和递归两种方式实现

public class erfen {

	public static void main(String[] args) {
		 int[] array = {1,2,3,4,5,6};
		 System.out.println("循环实现二分查找:"+demo1(array, 4));
		 System.out.println("递归实现二分查找:"+demo2(array, 6, 0, array.length-1));
	}
	
	/**
	 * 	循环实现
	 * @param array
	 * @param key
	 * @return
	 */
	public static int demo1(int[] array,int key) {
		int low = 0;
		int high = array.length-1;
		while(low<=high) {
			int middle = (low+high)/2;
			if (key == array[middle]) {
				return middle;
			}else if (key<array[middle]) {
				high = middle-1;
			}else {
				low = middle+1;
			}
		}
		return -1;
	}
	
	/**
	 * 	递归实现
	 * @param demo2
	 * @param key
	 */
	public static int demo2(int[] array,int key,int beginindex,int lastindex) {
		int middleindex = (beginindex+lastindex)/2;
		if (key<array[beginindex]||key>array[lastindex]||beginindex>lastindex) {
			return -1;
		}
		if (key<array[middleindex]) {
			return demo2(array, key, beginindex, middleindex-1);
		}else if (key>array[middleindex]) {
			return demo2(array, key, middleindex+1, lastindex);
		}else {
			return middleindex;
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值