Java二分查找

Java中有自带Arrays 工具类

Arrays.sort(data);

int index = Arrays.binarySearch(data, 3);

 

直接调用函数即可。index即为数组下标值。

 

public class er{
	public static void main(String[] args){
		int[] arr = {0,1,2,3,4,5,6,7,8,9};
		int a = 9;
		//int m = BinSearch(arr,0,arr.length-1,a);
		int m = BinSearch(arr,arr.length,a);
		System.out.println(m);
	}
	/*
	//递归
	static int BinSearch(int Array[],int low,int high,int key)  
	{  
		if (low<=high)  
		{
			int mid = (low+high)/2;  
			if(key == Array[mid])  
				return mid; 
			else if(key<Array[mid])  
				//移动low和high
				return BinSearch(Array,low,mid-1,key);
			else if(key>Array[mid])
				return BinSearch(Array,mid+1,high,key);
		}  
		return -1;  
	} 
	*/
	/*
	//递归
	public static int BinSearch(int[] arr,int begin,int end,int a){
		if (begin<=end)
		{
			int mid = (begin+end)/2;
			if (arr[mid] == a){
			//System.out.println("1");
			return mid;
			}
			else if (arr[mid] < a){
				return BinSearch(arr,mid+1,end,a);
				//System.out.println("2 "+mid+" "+end);
			}
			else if (arr[mid] > a){
				return BinSearch(arr,begin,mid-1,a);
				//System.out.println("3"+begin+" "+mid);
			}
		}
		
		return -1;
	}
	*/

	//普通循环
	public static int BinSearch(int[] a, int len, int goal)
	{
		int low = 0;
		int high = len -1;
		while (low <= high)
		{
			int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
			if (a[middle] == goal)
				return middle;
			//在左半边
			else if (a[middle] > goal)
				high = middle - 1;
			//在右半边
			else
				low = middle + 1;
		}
		//没找到
		return -1;
	}
}

  

posted @ 2016-08-15 18:57  小小暮雨  阅读(1125)  评论(0编辑  收藏  举报