算法基础:二分查找(BinarySearch)

5 篇文章 0 订阅

二分查找
前提:为有序数组
时间复杂度:log2n
空间复杂度:O(1)
思想:在有序数组中,采用分治策略,在最坏情况下在O(log2n)时间复杂度的情况下完成搜索。即:(默认升序)将n个元素分成两份,如果target=array[n/2]位置的元素,则完成搜索;如果target>array[n/2]则继续在右半部分查找,反之则在左侧部分查找,循环直至找到目标。找不到则退出。


import java.util.Scanner;

/**
 * @author :Dennis
 * @date :Created in 4/1/2020 16:03
 * @description:Binary Search
 * @modified By:
 * @version: 1.0
 */
public class BinarySearch {
    public static int Search(int[] array, int target) {
        int low, high, mid;
        low = 0;
        high = array.length - 1;
        while (low <= high) {
            mid = low + (high - low) / 2;
            if (array[mid] == target) {
                return mid;
            } else if (array[mid] < target) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8};
        int x = Search(array, 4);
        System.out.println("index:" + x);
        Scanner scanner = new Scanner(System.in);
        scanner.nextLine();
        scanner.close();
    }
}

除非放弃技术相关工作,否则每天最少Coding 50行^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值