package com.qey.learn;
/**
* @ClassName BinarySearch
* @Description
* @Author qianxl
* @Date 2021-03-03 11:19
* @Version 1.1
**/
public class BinarySearch {
public static void main(String[] args) {
int[] array = {1, 4, 6, 8, 9, 10};
int index = search(0, array.length - 1, array, 8);
System.out.println(index + "输出");
// binaryNoCycle(array, 8);
}
public static int search(int left, int right, int[] array, int finalVal) {
if (left > right) {
return -1;
}
int mid = (right + left) / 2;
if (array[mid] > finalVal) { //向左
return search(left, mid - 1, array, finalVal);
} else if (array[mid] < finalVal) { //向右
return search(mid + 1, right, array, finalVal);
} else {
return mid;
}
}
// 非递归排序算法
public static int binaryNoCycle(int[] array, int findVal) {
int left = 0;
int right = array.length - 1;
//注意!! left <=right 和递归查找不同 递归中用 left>right 跳出循环,而非递归遍历采用的是 left<=right 循环
while (left <= right) {
int mid = (left + right) / 2;
if (findVal < array[mid]) {
right = mid - 1;
} else if (findVal > array[mid]) {
left = mid + 1;
} else {
System.out.println("查询到了" + mid);
return mid;
}
}
return -1;
}
}