java中二分查询数组

/**
 * 二分查询
 * @author ma
 * @version V1.0
 */
public class ArrayHalfSort {
	
	/*
	 * 二分查询:
	 * 		就是用数组中的中间的一个元素和转入的变量比较,如果小于中间的元素,则以中间元素地前一个元素作为最的一个元素,重复比较,反之 亦然
	 * 注册:
	 * 		1.数组为有序数组 
	 * 		2.注册索引越界
	 */
	
	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77,88,99,100};
		
		arrayHalfFind(arr,11);
		System.out.println(ArrayHalfFind(arr,556));
	}
	
	/**
	 * 二分法查找整数在数组中的索引
	 * @param arr  要查找的数组
	 * @param value  要查找的数字
	 * @return 如果数字在数组中,则返回索引值;反之返回-1
	 */
	public  static int arrayHalfFind(int[] arr, int value) {
		
		//数组的最大索引
		int max = arr.length-1;
		
		//最小索引 
		int min = 0;
		
		//定义 一个int mid 来接收数组索引的二分之一值
		int mid = (min + max)/2;
		
		//遍历数组
		while(arr[mid] != value){
			//如果中间的值arr[mid]大于传入 的值value,则max = mid -1;如果中间的值arr[mid]小于传入 的值value,则min = mid +1;
			if(arr[mid] > value){
				max = mid -1;
			}else if(arr[mid] < value ){
				min = mid + 1;
			}
			
			//如果min > max ,则数组中没有该数,返回-1
			if(min > max){
				return -1;
			}
			
			//得到新的中间索引
			mid = (min + max)/2;
		}
		
		return mid;
		
	}

}

  

猜你喜欢

转载自www.cnblogs.com/majingang/p/9001549.html