千峰Java教程:032. 二分查找法

15、二分查找法

注意,这个是查找算法,不是排序算法,这里面返回的是数组下标。

二分查找法(折半查找):前提是在已经在排好序的数组中,通过将带查找的元素与中间索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。以此类推,直到找到为止。找不到返回一个负数(一般是-1)。

所以我们需要在一个已经排好的数组中来查找下标。记不记得”/“除法符号,这个除出来是整数,或者n>>>2二进制向右移动2位,最高位补0,一会会用到,后面的方法是将start加end之后除以二的快速方法。

设有这样一个数组:[10,20,50,65,88,90],我们要找88,则定义start下标为0,end下标为5,(0+5)/2=2,50<88,start = 2+1,(3+5)/2=4,88==88,此时不用再找了,直接结束。

代码演示:

public class a
{
	public static void main(String[] args)
	{
		int[] num = {10, 20, 50, 65, 88, 90};
		int key = binarySearch(num, 88);
		System.out.println(key);
	}
	public static int binarySearch(int[] num, int key)
	{
		int start = 0 , end = num.length-1 , middile;
		while(end >= start)
		{
			middile = (end + start) / 2;//或者这样写:middile = (end + start) >>> 2;
			if(num[middile] > key)
				end = middile;
			else if(num[middile] < key)
				start = middile;
			else
				return middile;
		}
		return -1;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值