欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分法(java)

程序员文章站 2024-03-16 09:00:46
...

   最先接触到算法神奇之处的就是二分法,所以打算动手写一下,并整理思路

  代码

package com.example.eurekaribbonclient.test;

/**
 * @ClassName test_3
 * @Description TODO
 * @Author Mr.G
 * @Date 2018/9/18 17:47
 * @Version 1.0
 */
public class test_3 {
    public static void main(String[] args){
        int[] arry={1,3,6,8,9,10,11,35,54,77,102};
        int flag=BinarySearch(54,arry);
        System.out.println(flag);
    }
    public static int BinarySearch(int key,int[] arry){
        int left=0;
        int right=arry.length-1;
        while(left<right){
            int mid=(left+right)/2;
            if(key<arry[mid]){
                right=mid-1;
            }else if(key>arry[mid]){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

代码很简单,思路就是不断取中间值,和key比较,然后用递归的思想不断推进,直到找到结果,如果没找到,就返回-1;

最差情况,是取log2N次此时时间复杂度是o(logn),最好的情况当然是一次取到,注意,二分法是对一组有序的数,如果是无序的需要先排序