在面对大量数据时,二分法可高效查找数组数据(本文为一维数组)
package com.lanling.javase.array;
import java.util.Scanner;//导入java.util.Scanner包,做后续接受用户键盘数据之用
public class Array01 {
public static void main(String[] args) {
//定义数组数据,必须按从小到大的顺序
int[] arr = {12, 34, 54, 64, 66, 75, 85, 523523};
//代码实现查找数据
while (true) { //while 语句可实现用户的重复输入
//接收用户数据
Scanner s = new Scanner(System.in);
System.out.print("请输入想要寻找的数:");
int i = s.nextInt();
//定义查找方法cahZhao,arr为数组,i为用户查找数据
int index = chaZhao(arr, i);
//三目运算符实现判断下标
System.out.println(index == -1 ? "该元素不存在" : "下标为:" + index);
}
}
/**
* 从数组中查找目标元素的下标
* @param arr 被查找的数组
* @param dest 目标元素
* @return -1表示元素不存在
*/
public static int chaZhao(int[] arr,int dest){
//开始下标
int begin = 0;
//结束下标
int end = arr.length - 1;
//实现二分法,
while(begin <= end) {
//中间元素下标
int mid = (begin + end) / 2;
if (arr[mid] == dest) {
return mid;
} else if (arr[mid] < dest) {
//目标在元素右边
//开始元素下标要重新赋值
begin = mid + 1;
} else {
end = mid - 1;
}
}
//当元素不存在时,返回-1
return -1;
}
}