二分查找法(binary search)

二分查找法:一种在有序列表中查找某个值的算法,它每次都将待查找的空间分为两半,在其中一般继续查找。
使用二分查找的前提是:已经排序好的列表。否则,sum对其查找的结果不做保证。
代码实现:
// 使用while循环的二分查找法
public static int binarySearch(int[] numbers, int target) {
int min = 0;
int max = numbers.length - 1;
while (min <= max) {
int mid = (max + min) / 2;
if (numbers[mid] == target) {
return mid; // found it
} else if (numbers[mid] < target) {
min = mid + 1; // too small
} else {
max = mid - 1; // too large
}
}
return -min - 1; // not found
}

// 使用递归的二分查找法
//参数:数组,数组开始下标,数组结束下标,查询目标值。
//返回值:为查询值在原数组中的位置,若查询值不在数组中,则返回-1
public static int binarySearch(int[] nums ,int start,int end,int target){
int middle = (start + end)/2;
//判断数组是否为空
if(start > end){
return -1;
}

	//数组非空,判断目标值
	if(nums[middle] < target){
		start = middle +1;
		return binarySearch(nums, start, end, target);
	}else if(nums[middle] == target){
		return middle;
	}else{
		end = middle -1;
		return binarySearch(nums, start, end, target);
	}
}

////end

posted @ 2017-04-06 22:03  Hosens  阅读(800)  评论(0编辑  收藏  举报