码迷,mamicode.com
首页 > 编程语言 > 详细

二分法查找——Java

时间:2015-08-20 13:09:32      阅读:118      评论:0      收藏:0      [点我收藏+]

标签: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;
		}
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

二分法查找——Java

标签:java   算法   数据结构   二分法查找   

原文地址:http://blog.csdn.net/zzc8265020/article/details/47805311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!