使用二分查找的前提: 只能对已经进行排好序的数列进行查找。
- 思想:每次都实现查找数据中的中间那个元素,将我们需要查询的数据和中间的元素进行比较。
1、首先定义数列中的最小索引和最大索引
2、计算出中间索引
3、用中间索引所对应的数值和要查询的数进行比较数值 = 查找的数 返回中间的索引
数值 > 查找的数 在左边查找
数值 < 查找的数 在右边查找
4、重复第二步
5、如果最小的索引比最大的索引值还大,那么说明没有找到,则返回 -1.
代码示例:
/**
* 二分查询
* @author ZMF
*
*/
public class BinarySearch {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {11,22,33,44,55,66,77,88,99};
Scanner input = new Scanner(System.in);
System.out.print("请输入你要查询的数字:");
int num = input.nextInt();
int index = binarySearch(array, num);
if (index != -1) {
System.out.println("查找到"+ num +"这个数字在这个数列中的索引是:" + index);
}else {
System.out.println("没有查找到这个数字");
}
}
/**
* 定义的二分查找方法
*/
public static int binarySearch(int[] array,int num) {
//定义最小索引
int min = 0;
//定义最大索引
int max = array.length - 1;
//计算中间索引
int mid = (min + max) / 2;
while (array[mid] != num) {
//数值 > 查找的数 在左边查找
if (array[mid] > num) {
//重新定义最大索引
max = mid - 1;
}else if (array[mid] < num) { //数值 < 查找的数 在左边查找
//重新定义最小索引
min = mid + 1;
}
//如果最小的索引比最大的索引值还大,那么说明没有找到,则返回 -1.
if(min > max){
return -1;
}
//每次循环后,重新定义中间索引
mid = (min + max) / 2;
}
//返回中间索引
return mid;
}
}