您的位置:首页 > 其它

【算法基础】二分查找

2014-12-18 23:36 381 查看
之前去华为的面试,一上来问了些项目的东西,因为对项目比较了解,没有什么问题,后来让写个二分查找,可能稍微有点紧张,表示竟然一时半会没想出来怎么写,纠结了半天,到底是用递归还是基本用法,后来还是写出来了,虽然用的是基本算法,回来后我觉得还是有必要记录一下,突然觉得自己的基础还是不够牢靠啊。。

首先,要明确的是二分查找的数组必须是经过排序的。要么递增要么递减。下面就是两种二分查找的实现方式:

package binsearch;

public class BinSearch {

/**
* 二分查找,找到返回索引,找不到返回-1
*
* @param array
*            要查找的数组
* @param key
*            目标值
* @return
*/
public static int binarySearch(int[] array, int key) {
int begin = 0;
int end = array.length - 1;
while (begin <= end) {
int middle = (end + begin) / 2;
if (array[middle] < key) {
begin = middle + 1;
} else if (array[middle] > key) {
end = middle - 1;
} else {
return middle;
}
}
return -1;
}

/**
* 二分查找 (递归方式)
* @param array 查找的数组
* @param key 要找的数值
* @param begin 开始位置
* @param end 结束位置
* @return
*/
public static int binarySearch(int[] array, int key, int begin, int end) {
int midIndex = (begin + end) / 2;
if (key < array[begin] || key > array[end]
|| begin > end) {
return -1;
}
if (key < array[midIndex]) {
return binarySearch(array, key, begin, midIndex - 1);
} else if (key > array[midIndex]) {
return binarySearch(array, key, midIndex + 1, end);
} else {
return midIndex;
}
}
}


算法什么的也没有针对性的训练过,看来还是要多巩固一下基础了。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: