直接上折半查找的思路图:
第一种情况:数组中存在这个数
第二种情况:数组中不存在这个数
实现代码:
public class Demo07 {
public static void main(String[] args) {
/*
* 折半查找
*/
int number = 1; //要查找的数字
int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int min = 0; //找到数组的最小下标
int max = arr.length-1; //找到数组的最大下标
int mid = (min+max)/2; //找到初始的中间下标
while (arr[mid]!=number) { //判断数字是否等于中间元素,如果是就找到了,如果不是,循环建立新的区间
if (number>arr[mid]) {
min = mid+1; //如果数字大于中间元素,最小下标更新为紧挨着中间下标的右侧元素下标
} else {
max = mid-1; //如果数字小于中间元素,最大下标更新为紧挨着中间下标的左侧元素下标
}
if (min > max) { //如果最小的下标大于了最大的下标,说明没有找到,打印反馈信息,终止程序运行
System.out.println("没有找到");
System.exit(0);
}
mid = (min+max)/2; //更新中间下标
}
System.out.println(number+"找到了,下标为"+mid); //能运行到这一行说明找到了,打印输出
}
}