二分法的原理:
将一个数组分为两半:
小于目标数的一边和大于目标数的另一边;
不断将数组拆成两部分,并判断目标数在数组的哪一边,直至无法拆分从而找到目标数在数组中的位置。
以下是关于二分法的代码:
package com.chai;
import java.util.Arrays;
public class Er {
public static void main(String args []) {
int arr[]={42,4,34,356,5,65,43};
Arrays.sort(arr);//使用sort方法将数组进行排序
System.out.println(Arrays.toString(arr));//把数组中的内容以字符串的形式打印
int result=binarySearch(arr,0);
System.out.print(result);
}
public static int binarySearch(int[]a,int key) {
int low=0;//起点位置
int high=a.length-1;//结束位置(从零开始数所以减一);
int mid=0;//中间位置初始化
while(low<=high) {//如果low等于或者大于high则说明搜索到达边界;
mid=(low+high)/2;//除二得中间位
if(a[mid]==key) {//如果满足条件则是目标数;
return mid;
}
if(a[mid]<key) {//如果中间数小于目标数,则向右搜索
low=mid+1;//将中间数右边赋值给low;
}
else if(a[mid]>key) {//如果中间数大于目标数,则向左搜索
high=mid-1;//将中间数左边一位赋给high;
}
}
return -1;//如果没有找到返回-1;
}
}