用Java实现二分法查找
import java.util.Arrays;
public class The1stChapter {
/**
* 二分查找法的实现
* @param obj 被查找的整数
* @param array 查找的整数数组
* @return 如果被查的数存在,返回true,如不存在,返回false
*/
public static boolean binarySearch(int obj, int[] array) {
int start = 0;
int end = array.length - 1;
//先对数组排序才能使用二分查找
Arrays.sort(array);
while (start <= end) {
int mid = start + (end - start) / 2;
if (obj < array[mid])
end = mid - 1;
else if (obj > array[mid])
start = mid + 1;
else return true;
}
return false; //如果整个循环结束都没有查找到目标,返回false,表示目标不存在
}
}
测试,在一个本地文件中写入了一组数,需要查询某数是否在文件中的这些数里面。
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws IOException {
System.out.println("Input an integer:");
Scanner sc = new Scanner(System.in);
int obj = sc.nextInt();
//从本地的testFile读取一组整数
Scanner scf = new Scanner(new FileInputStream("D:\\Program\\Javaprogram\\Algorithm\\src\\testFile"), StandardCharsets.UTF_8);
ArrayList<Integer> list = new ArrayList<>();
while (scf.hasNextInt()) {
list.add(scf.nextInt());
}
//Java 8实现ArrayList<Integer>转int[]
int[] array = list.stream().mapToInt(Integer::intValue).toArray();
boolean hasObj = The1stChapter.binarySearch(obj, array);
System.out.println(hasObj);
sc.close();
scf.close();
}
}