二分法查找——Java

首先介绍一下什么是二分法查找。

顾名思义二分法即多次将待查数组的长度折半,但前提条件时待查找数组中的数据需要是已经排序好了的数据。

主要思想:

对于待查找数组arr[low,high],其中high=arr.length-1,待查找元素des

(1)确定数组中间位置mid=(low+high)/2

(2)将查找值des与arr[mid]进行比较,若相等,则直接返回该位置;否则确定新的查找位置,继续二分查找。区域确定如下:如果arr[mid]>des由数组的有序性可知

arr[mid,mid+1.........,high]>des;故新的区间为arr[low,.........,mid-1];如果arr[mid]<des,同理由数组的有序性可知arr[low,.........mid-1]<des,则新的区间为arr[mid+1,......,high]。每一次查找都与中间值比较,就可以确定是否查找成功,不成功当前查找区间缩小一半


具体代码如下:

package Algorithm;

public class binarySearch
{


	public static void main(String[] args)
	{
		int[] src=new int[]{1,3,5,7,9};
		System.out.println(binarySearch1(src,7));
		System.out.println(binarySearch1(src,3,0,src.length-1));
	}
	
	/**
	 * *二分查找算法*
	 * @param srcArray
	 * 有序数组
	 * @param des
	 * 查找元素
	 * @return des的数组下标,没找到返回-1
	 */
	
	public static int binarySearch1(int[] srcArray,int des)
	{
		int low=0;
		int high=srcArray.length-1;
		while (low<=high)
		{
			int mid=(low+high)/2;
			if (des==srcArray[mid])
			{
				return mid;
			}
			else if(des<srcArray[mid])
			{
				high=mid-1;
			}
			else
			{
				low=mid+1;
			}
		}
		return -1;
	}
	
	/**
	 * 二分查找(递归)被查找数在数组中的位置
	 * @param dataset
	 * @param data
	 * @param beginIndex
	 * @param endIndex
	 * @return index 被查找数下标位置
	 */
	public static int binarySearch1(int[]dataset,int data,int beginIndex,int endIndex)
	{
		int mid=(beginIndex+endIndex)/2;
		if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)
		{
			return -1;
		}
		if (data<dataset[mid])
		{
			return binarySearch1(dataset,data,beginIndex,mid-1);
		}
		else if(data>dataset[mid])
		{
			return binarySearch1(dataset,data,mid+1,endIndex);
		}
		else
		{
			return mid;
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值