知之者不如好之者,好之者不如乐之者。
当我们需要在一个有序的数组中需要查找某一个元素是否存在或元素存在的位置时,使用的比较多的就是二分查找也叫折半查找,首先我们来理一下它的查找流程,我们有一张图片来展示:(网页显示图片小,右键选择-在新标签页中打开图片 查看高清原图)
下面是实现的代码:
package com.array.text.search;
import java.util.Arrays;
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
// 首先必须是有序的数组才能使用二分查找
int[] array = { 6, 2, 3, 4, 5, 1, 7 };
// 将数组从小到大排列顺序为1,2,3,4,5,6,7.
Arrays.sort(array);
// 手动输入一个数字查找是否在数组中
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
int num = scanner.nextInt();
// 数组第一个元素的下标
int start = 0;
// 数组最后一个元素的下标
int end = array.length - 1;
//起始下标必须小于最后一个元素的下标
while (start <= end) {
// 中间元素的下标
int mid = (start + end) / 2;
if (num > array[mid]) {// 说明num在数组得右边
start = mid + 1;
} else if (num < array[mid]) {// 说明num在数组得左边
end = mid - 1;
} else {// 说明array[mid] = num;
System.out.println(num + "在数组的第" + mid + "位");
break;// 找到后退出循环
}
}
}
}
需要注意的是其中start>=end条件表示满足整个数组都能查找到一遍。如果start>end,则查找的数字一定不再此数组中。