您的位置: 翼速应用 > 业内知识 > Java > 正文

分享一下Java经典算法折半查找的原理与实现过程

本文给大家分享一下Java经典算法折半查找的原理与实现过程,折半查找法也叫做⼆分查找,顾名思义就是把数据分成两半,再判断所查找的key在哪⼀半中,再重复上述步骤知道找到⽬标key,详细内容请看本文。


分享一下Java经典算法折半查找的原理与实现过程


分享一下Java经典算法折半查找的原理与实现过程


二分查找


二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法,可以在数据规模的对数时间复杂度内完成查找。是一种在有序数组中查找某一特定元素的搜索算法。


算法思路


以升序数列为例,比较目标元素与数列中间位置的元素的大小,如果目标元素比中间位置的元素大,则继续在数列的后半部分中进行二分查找;如果目标元素比中间位置的元素小,则在数列的前半部分进行比较;如果相等,则找到了元素的位置。每次比较的数列长度都会是之前数列的一半,直到找到相等元素的位置或者最终没有找到目标元素。


图解


给定一个有序的升序排列的数组 nums=[-1,0,2,5,8,12,18,38,43,46]


然后在该数组中找到目标值 target = 12。


图解如下:


折半查找思路图解


力扣原题


传送门:


题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。


示例 1:


输入: nums = [-1,0,3,5,9,12], target = 9

输出: 4

解释: 9 出现在 nums 中并且下标为 4


示例 2:


输入: nums = [-1,0,3,5,9,12], target = 2

输出: -1

解释: 2 不存在 nums 中因此返回 -1


解题思路:


根据题意得出该数组为有序数组,这也是使用二分查找的前提条件。


●  定义两个指针分别指向数组的首尾两个元素;

●  找到数组的中间值mid;

●  如果nums[mid] < target,则 target 位于数组的后半部分,反之nums[mid] > target在前半部分;

●  重复上一步操作,直到nums[mid] = target,说明找到target,返回下标即可。


Java代码实现:


class Solution {
    public int search(int[] nums, int target) {
        int left = 0,right = nums.length - 1;
        while(left <= right) { // 循环条件
            int mid = left + (right - left) / 2;
            if(nums[mid] == target){
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;  // 找不到则返回-1
    }
}


复杂度分析:


●  时间复杂度:O(logn),其中 n 是数组的长度。


●  空间复杂度:O(1)。


关于Java经典算法折半查找的原理与实现过程解析到这里就结束了,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题