折半查找(二分查找)

1. 算法思想

折半查找又叫二分查找,要求待查找的有序序列(比如数组)。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了返回为止,否则序列中没有待查的关键字。
这里写图片描述
这里写图片描述

2. 代码实现

/**
 * 详述: 二分查找法--非递归直接查找
 * 前提条件: 数组为升序数组
 * @param array
 * @param a
 * @return
 */
public static int BiSearch(int []array,int find){
	int low = 0;
	int high = array.length;
	int mid = 0;
	while(low < high){
		mid=low+((high-low)/2); //直接low+high有整型溢出的风险
		if(array[mid] == find){
			return mid + 1;
		}
		else if(array[mid] > find){
			high = mid - 1;
		}else if(array[mid] < find){
			low = mid + 1;
		}
	}	
    return -1;
}
/**
 * 详述: 二分查找法--递归查找
 * 前提条件: 数组为升序数组
 * @param array
 * @param find
 * @param low
 * @param high
 * @return
 */
public static int BiSearchRecursion(int []array, int find, int low, int high){
	int mid=low+((high-low)/2); //int mid = (low + high) / 2; 直接low+high有整型溢出的风险
	if(array[mid] == find){
		return mid+1;
	}else if(array[mid] > find){
		return BiSearchRecursion(array, find, low, mid-1);
	}else if(array[mid] < find){
		return BiSearchRecursion(array, find, mid+1, high);
	}
    return -1;
}
posted @ 2017-03-15 11:21  nowuseeme  阅读(234)  评论(0)    收藏  举报