首页 > 其他分享 >[数组练习题]二分法查找操作实例:使用二分法查找有序数组中元素。 找到返回索引,不存在输出-1。(保姆级:一行一注释)(一图流)

[数组练习题]二分法查找操作实例:使用二分法查找有序数组中元素。 找到返回索引,不存在输出-1。(保姆级:一行一注释)(一图流)

时间:2024-03-19 22:31:08浏览次数:28  
标签:int 元素 二分法 查找 数组 array

文章目录


题干

提示:这段是题干,仔细阅读仔细分析:

二分法查找操作:
使用二分法查找有序数组中元素。
找到返回索引,不存在输出-1。


一、题目分析

1.定义数组,用于后续在数组中查找元素

2.对数组进行排序

必须是有序数组才能用二分法查找

3.定义方法

4.调用方法,打印输出

二、代码

1.代码块

代码如下(示例):

package com.jiruan.arraywork05;

import java.lang.reflect.Array;
import java.util.Arrays;

/*二分法查找操作:
使用二分法查找有序数组中元素。
找到返回索引,不存在输出-1。*/
public class Work5 {

    /*程序主入口*/
    public static void main(String[] args) {

        /*声明一个数组,存放了这些元素(无序的)*/
        int[] array = new int[]{55, 96, 45, 62, 31, 12, 2, 7, 8, 13, 14, 28, 9, 99, 0, 1};

        /*冒泡排序,把无序数组变为有序,有序数组才能用二分法查找*/
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                if (array[i] < array[j]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }

        /*调用下面binarySearch静态方法,打印输出*/
        Work5 w = new Work5();
        System.out.println(w.binarySearch(array, 999));

        /*打印输出数组,方便对照检查,可以没有这行*/
        System.out.println(Arrays.toString(array));
    }

    /*定义方法,方法用于二分法查找数组里是否有这个元素*/
    /*方法传入数组和一个目标值*/
    public int binarySearch(int[] array, int target) {

        /*定义左边界,*/
        /*起始左边界应该是数组第一个元素,索引是0*/
        int l = 0;

        /*定义右边界,起始右边界应该是数组最后一个元素*/
        /*最后一个元素索引为长度-1*/
        int r = array.length - 1;

        /*循环查找元素是否在数组中*/
        while (l <= r) {

            /*判断数组如果是空,或者长度为0,则肯定不在数组中*/
            /*方法返回-1,表示不在数组中*/
            if (array == null || array.length == 0) {
                return -1;
            }

            /*定义中间边界,中间边界是左右边界除2*/
            int mid = (l + r) / 2;

            /*如果目标元素正好是中间边界,则找到了*/
            /*返回这个值对应的索引,就是要找的元素在数组中的位置*/
            if (array[mid] == target) {
                return mid;
            } else if (array[mid] > target) {
                /*如果中间边界大于要找的那个数,说明要找的数在数组左半部分
                 把右边界放到中间,再在左半部分找元素*/
                r = mid - 1;
            } else {
                /*如果中间边界小于要找的那个数,说明要找的数在数组右半部分
                 把左边界放到中间,再在左半部分找元素*/
                l = mid + 1;
            }
        }//一直循环,如果找到了就返回值了,不会向下运行
        return -1;//没找到,代码走到这行,就返回-1提示没找到
    }
}

2.一图流

一图解决困惑666


总结

这是一道数组练习题,本文是我的个人理解,希望对你也能有所帮助!

标签:int,元素,二分法,查找,数组,array
From: https://blog.csdn.net/weixin_51722918/article/details/136857056

相关文章

  • JS实现数组中重复数据合并
    //假设有一个包含数据对象的数组,其中的对象具有相同的name属性vardataArray=[ {name:'John',age:25,city:'NewYork',geometry:'A'}, {name:'Jane',age:30,city:'LosAngeles',geometry:'B'}, {name:'......
  • 计数组合【2024蓝桥杯0基础】-学习笔记
    文章目录计数原理排列数组合数组合数性质例题分析代码复现例题2状态分析代码复现常见的排列组合问题圆排列代码复现第二类斯特林数感悟计数原理排列数组合数组合数性质例题分析代码复现defksm(a,b,c):ans=1%cwhileb!=0:......
  • 二维数组_细菌的繁殖与扩散
    任务描述在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。输入格式:输入为两个整数,第一个整......
  • 长度最小的子数组
    题目链接:209.长度最小的子数组-力扣(LeetCode)题目:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。......
  • 二分查找总结——二分查找细节分析 + 红蓝染色法
    1.写在前面本文为个人学习总结,二分算法参考:B站Up:灵茶山艾府(二分查找红蓝染色法)视频链接:https://www.bilibili.com/video/BV1AP41137w7/Leetcode题目:34.在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你......
  • PostgersSQL 数组类型
    什么是数组列?数组列是一种特殊的数据类型,它可以在单个数据库列中存储多个值。与传统的单值列不同,数组列允许我们将多个相关值组合成一个实体。例如,在一个名为”tags”的表中,我们可以使用数组列来存储一篇文章的多个标签。 如何在PostgreSQL中创建数组列?在PostgreSQL中,我们可......
  • js数组方法详解
    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响。 创建数组一.字面量方式constarray=[1,2,3,4,5]; 二.使用Array构造方法1.无参构造-创建一个长度为0的空数组constarray......
  • c++学习记录 STL—常用查找算法
    一、算法简介find               //查找元素find_if             //按条件查找元素adjacent_find       //查找相邻重复元素binary_search      //二分查找法count        ......
  • react使用map循环渲染dom时,增加或删减数组,但想保持其余的dom与数据不发生改变
     核心思路:dom渲染与key值有关系,如果想实现上述需求,则需要关注改变前后的循环项的key值是否发生改变currentCabinet?.map((item,index)=><BaseInfokey={`currentCabinet${item?.ciId}`}sceneKey={sceneKey}currentCabinet={item}/>)如以上示例,以ciId为key值,可以保证即......
  • 数组的reduce 的使用和扁平化处理
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title></hea......