实现可以进行高速搜索的“二分搜索”

    如果待搜索的数据列是升序或者降序排序的数据列,那么可以用二分搜索(binary search)算法快速搜索出目标数据。

    二分搜索专注于数据列中间位置的数据M1,如果中间位置的数据和目标数据T一致,搜索结束,否则缩小搜索范围找起始或者末尾位置与M1之间的中间位置的数据M2,接着是M3,…,等等,一边和T比较大小,一边折半缩小搜索范围。

具体实现

package com.lishu.search;

/**
 * @Author : chenlishu
 * @Date: 2021-09-15
 * @Description : 二分查找算法
 */
public class BinarySearch {

    public static void main(String[] args) {
        int[] arr = {1,5,7,10,15,17,18};
        int num = binarySearch(arr, 0, arr.length - 1, 17);
        System.out.println(num);
    }

    /**
     * 二分查找
     * @param arr 
     * @param start
     * @param end
     * @param num
     * @return
     */
    public static int binarySearch(int[] arr,int start,int end,int num){
        if(arr.length < 0){
            return -1;
        }

        //如果开始索引和结束索引为同一位置,说明只剩一个元素没有比较了。将当前元素与待搜索值num进行比较,为true返回当前索引位置,否则返回-1
        if(end - start < 1){
            return arr[start] == num ? start : -1;
        }

        //计算中间位置middle
        int middle = (end + start) / 2;

        //如果待搜索元素小于当前中间元素,说明待搜索元素在当前中间元素的右列表中,继续递归查找
        if(num < arr[middle]){
            return binarySearch(arr,start,middle - 1,num);
        }
        
        //如果待搜索元素大于当前中间元素,说明待搜索元素在当前中间元素的左边列表中,继续递归查找
        if(num > arr[middle]){
            return binarySearch(arr,middle + 1,end,num);
        }

        //走到这里说明 待搜索元素等于当前中间元素 直接返回当前中间位置middle
        return middle;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值