二分查找算法例子

最近学习了java的集合相关部分知识,较之前比较深入地学习了这部分内容,特别是Map部分的HashMap,在JDK1.8之后,HashMap加入了红黑树。为什么加入了红黑树呢?这是因为红黑树的增删改查的速度都是非常快的,尤其是查询的速度,为什么查询的速度很快,主要是得益于底层的二分搜索算法

本文主要来介绍一下二分搜索算法的思想,然后通过一个例子来进行演示、说明,希望大家和自己可以更好的理解、记住这个常用、重要的搜索算法。话不多说,下面开始进入正题。

我们先看看百度的解释:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

直接代码理解:

package com.xjyk.project.tool.swagger;

/**
 * 二分搜索算法
 */
public class BinarySearch {

    public static void main(String[] args) {

        int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        // 二分搜索元素特定元素'8'
        int result = binarySearch(arr, 8);

        System.out.println(result);
    }


    // 二分搜索元素
    private static int binarySearch(int[] newArr, int target) {

        int startIndex = 0; // 搜索范围开始位置
        int endIndex = newArr.length - 1; // 搜索范围结束位置

        while (startIndex <= endIndex){  // 判断条件,开始位置大于结束位置查找结束

            int center = newArr[endIndex / 2]; // 获取中间位置索引

            if (newArr[center] == target){  // 相等直接返回索引
                return center;
            }else if (newArr[center] > target){ // 大于,往左边查找
                endIndex = center -1;
            }else { // 小于,往右边查找
                startIndex = center + 1;
            }
        }
        return -1; // 没找到目标元素,直接返回
    }
}

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值