* 二分查找
* 二分查找法又称为折半查找,适合 有序 的列表
* 思路: 将列表中间位置元素和目标元素进行比较,如果相等,则查找成功;
* 如果不相等,则查找的元素一定在表的前半部分或后半部分。
* 在判断,如果目标元素大于中间元素,则进一步查找后半部分,否则进一步查找前半部分。
* 重复以上过程,直到找到满足条件的元素,使查找成功;
* 如果还没有找到,则此元素不在列表里面。
* 注意:一定是有序数组
public class BSearch {
public static void main(String[] args) {
int[] last = {2,5,8,9,11,19};
int num = 21;
find(last,num);
}
private static void find(int[] arr1,int num) {
if (arr1.length%2!=0){
if (arr1[arr1.length/2] == num){
System.out.println("查询成功");
}else{
int[] arr2 = new int[arr1.length/2];
if (arr1[arr1.length/2]>num){
System.arraycopy(arr1,0,arr2,0, arr1.length/2);
if (arr1.length>1){
find(arr2, num);
}else {
System.out.println("数组中不存在该数");
}
}else {
System.arraycopy(arr1, arr1.length / 2 + 1, arr2, 0, arr1.length / 2);
if (arr1.length > 1) {
find(arr2, num);
} else {
System.out.println("数组中不存在该数");
}
}
}
}else {
int[] arr2 = new int[arr1.length/2];
if (arr1[arr1.length/2]==num||arr1[arr1.length/2-1]==num){
System.out.println("查询成功");
}else {
if ((arr1[arr1.length/2]+arr1[arr1.length/2-1])/2 > num){
System.arraycopy(arr1, 0, arr2, 0, arr1.length/2);
find(arr2, num);
}else{
System.arraycopy(arr1, arr1.length/2, arr2, 0, arr1.length/2);
find(arr2, num);
}
}
}
}
}