Java数组二分查找(思路及代码实现)
首先二分查找是一个具有前提的算法,前提就是必须这个数组是有序的,如果你是无序的要么你使用别的算法或者你排好序了再用.(提一嘴有些人叫他折半查找都是一样的)
思路:既然是二分查找首先我们先确定中间值,因为一半儿一半儿嘛(要不然咋叫二分查找), 中间值 = (开始元素的下标 + 结束元素的下标)/2
这时候把你输入的元素和这个中间值比较,如果大那就在右半部分,反之亦然.当然如果你输入要查找的值刚好在中间,恭喜,幸运儿诞生了
这里我是直接封装了一个方法
import java.util.Arrays;
import java.util.Scanner;
public class ArrayUtilsFound {
public static int[] HalfFound(int[] array){
Arrays.sort(array);
Scanner scan = new Scanner(System.in);
int begin = 0;
int end = array.length - 1;
int middle = 0;
int num = scan.nextInt();
boolean flag = false;
while(begin <= end){
middle = (begin + end)/2;
if (array[middle] == num) {
flag = true;
break;
} else if (array[middle] > num) {
end = middle - 1;
//-- 这里是中间值比你输入的大,在左边,所以要中间的元素-1,因为你中间的元素已经比较过了
} else {
begin = middle + 1;
//-- 中间值比输入的值小,在右边,所以要+1因为要在右边进行二分查找,而中间值不参与
}
}
if (flag) {
System.out.println("中间的值为: " + middle);
} else {
System.out.println("不存在");
}
scan.close();
return array;
}
}
