/** * 二分发查找:判断数组中间值与要 查找的值的大小,如果数组中间值小于要查找的值, * 移动数组的结束下标,在数组的右边查找, * 否则移动数组的开始下标到左边,在数组的左边查找 * 查找不到,返回-1,查找到,返回数组的下标值 * @author Aobo */public class BinarySearch {public static void main(String[] args) {int[] data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };int
value = 0;int position = binarySearch(data, 0, data.length - 1, value);// int position = binarySearch1(data, 0, data.length - 1, value);System.out.println("position===" + position);}/** * 二分法查找函数(使用递归) * * @param data * 在该数组中查找 * @param start * 数组的开始下标 * @param
end * 数组的结束下标 * @param value * 要查找的值 * @return 如果在数组data中找到该数组,直接返回下标,如果找不到,返回-1 */public static int binarySearch(int[] data, int start, int end, int value) {// 如果数组为空,直接返回-1,即查找失败if (data == null) {return -1;}if (start <= end) { // 判断结束的条件int middle = (start
+ end) / 2; // 找到中间元素// 等于中值直接返回if (data[middle] == value) {return middle;}// 大于中值时在中值后面找if (data[middle] < value) {start = middle + 1; //将开始位置移动到右边return binarySearch(data, start, end, value); //递归右边} else { // 小于中值时在中值前面找end = middle - 1; //将结束位置移动到左边return
binarySearch(data, start, end, value); //递归左边}} else {return -1;}}/** * 二分法查找(非递归) * @param data * @param value * @return */public static int binarySearch1(int[] data,int start, int end , int value) {while (start <= end) {int mid = (start + end) / 2;// 与中间值比较确定在左边还是右边区间,以调整区域if
(value > data[mid]) {start = mid + 1; //在右边查找} else if (value < data[mid]) {end = mid - 1; //在左边查找} else {return mid; //查找到返回下标}}return -1;}}
二分法查找
最新推荐文章于 2019-07-23 11:17:15 发布