二分搜索算法,Java实现

这里用递归和非递归的方式实现了二分搜索:

PS:二分搜索是对已经排序完成的数组进行搜索定位,我这里是以升序排列为例,可用归并排序等算法进行排序(可见我其他博文)



/**
 * 二分搜索算法,通过比较顺序列表中间元素的值,迅速缩小规模查找元素,
 * 时间复杂度为:O(n) = logn
 */
public class BinarySearch {
    /**
     * 二分搜索算法,传入一个排好序的数组和需要查找的元素,若存在,返回它的其中一个索引
     * @param array
     * @param element
     * @return
     */
    public static int BinarySearch(int[] array,int element,int left, int right){
        int mid = (right + left) >> 1;
        if (array[mid] == element) {
            return mid;
        }else{
            if (right - left > 1){
                if (array[mid] > element){
                   return BinarySearch(array,element,left,mid - 1);
                }else {
                  return   BinarySearch(array, element, mid + 1, right);
                }
            }else
                return -1;
        }
    }


    /**
     * 非递归实现
     * @param array
     * @param element
     * @return
     */
    public static int BinarySearch1(int[] array, int element){
        if (array == null || array.length == 0){
            return -1;
        }
        int right = array.length - 1;
        int left = 0;
        int mid = (right + left) / 2;
        while (right >= left){
            if (array[mid] == element){
                return mid;
            }else if (array[mid] < element){
                left = mid;
                mid = (right + mid) / 2;
            }else if (array[mid] > element){
                right = mid - 1;
                mid = (right - left) / 2;
            }
        }
        return -1;
    }

}

猜你喜欢

转载自blog.csdn.net/aa792978017/article/details/89053201
今日推荐