二分查找——单调递增寻找key值,找不到返回-1

    xiaoxiao2023-11-20  161

    感觉二分查找可以用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; } }
    最新回复(0)