二分查找(折半)
二分查找前提是必须是有序的
定义数组(有序)
折半比较
将查找的元素和数组中间的元素比较,如果没找到则继续折半
二分查找法步骤(升序数组):
- 找到数组中间位置的值,并存放在一个top中
- 需要查找的值key,拿key和top比较
- 如果key>top,则把数组中间位置作为下一次计算的起点位置,重复(1)和(2)
- 如果key<top,则把数组中间位置作为下一次计算的终点位置,重复(1)和(2)和(3)
- 如果key=top,返回中间位置下标(元素),完成查找
示例:
package 二分;
public class 二分 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int searchNum = 8;// 要查找的数字
int startIndex = 0;// 定义开始查找范围的下标
int endIndex = arr.length - 1;// 定义结束查找范围的下标
int midIndex = -1;// 定义中间位置的下标
boolean isFind = false;// 标记是否找到,false没找到,true找到了
do {
//中间的位置
midIndex = (startIndex + endIndex) / 2;
if (arr[midIndex] == searchNum) {
System.out.println("恭喜您,找到了!下标是:" + midIndex);
isFind = true;
break;
} else if (arr[midIndex] > searchNum) {
endIndex = midIndex - 1;
} else {
startIndex = midIndex + 1;
}
} while (startIndex <= endIndex);
if (! isFind) {
System.out.println("抱歉,该数字没有找到");
}
}
}