感觉二分查找可以用Arrays中的binarySearch方法来进行,但不知道比赛的时候让不让调用,经测定,他们的时间复杂度可能相同,因为测试之后,显示的结果均为0;但此方法,只适用于已经排好序的数组,且笔者所写方法不适用于以下用例:
如: 5 12
12 12 12 12 12
package 基本算法;
import java.util.Arrays;
import java.util.Scanner;
public class 二分法 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*输入数组中的个数N,输入要找的key值K,然后输入数组*/
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int K=sc.nextInt();
int[] ch=new int[N];
Arrays.fill(ch, 12);
long start=System.currentTimeMillis();
int index=find(ch,K);
long end=System.currentTimeMillis();
long time1=end-start;
long start1=System.currentTimeMillis();
int index1=Arrays.binarySearch(ch, K);
long end1=System.currentTimeMillis();
long time2=end1-start1;
System.out.println(index+" time1: "+time1+" "+index1+" time2: " +time2);
}
private static int find(int[] ch, int k) {
// TODO Auto-generated method stub
int l=0,r=ch.length-1;
while(l<=r) {
int mid=(l+r)/2;
if(ch[mid]==k) {
return mid;
}else if(ch[mid]>k) {
r=mid-1;
}else {
l=mid+1;
}
}
return -1;
}
}