首页 > 其他分享 >二分查找法

二分查找法

时间:2024-08-20 20:49:29浏览次数:9  
标签:二分 end int mind mid 查找 front

二分查找法

定义:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。

前提:

​ 1.必须采用顺序存储结构

​ 2.必须按关键字大小有序排列。

我们以一个练习题为例:假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.

思路:可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2.

​ 开始令front=0(指向3),end=7(指向88),则mid=3(指向36)。因为mid>x, 故应在前半段中查找。

​ 令新的end=mid-1=2,而front=0不变,则新的mid=1。此时x>mid,故确定应 在后半段中查找。

​ 令 新的front=mid+1=2,而end=2不变,则新mid=2,此时a[mid]=x,查找成功。

​ 如要查找的数不是数列中的数,例如x=25,当第三次判断时,x>a[mid],按以上规律,令front=mid+1,即front=3,出现front>end的情况,表示查找不成功。

public class text {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);//创建一个键盘录入类
        System.out.println("请输入想要查询的值:");//提示语句
        int x = sc.nextInt();//创建一个int类型的变量来接受上面键盘输入的值
        int[] arr ={3,12,24,36,55,68,75,88};//创建一个包含题中数字的数组
        int front=0;int end=arr.length-1;int mind=(front+end)/2;
        //可设三个变量front,mid,end分别指向数据的上界,中间和下界
    ee:for(int i=0;i<=arr.length-1;i++) {//对数组arr进行遍历
        while(end>=front){//当下界的数组的值大于上界的数组的值
            if (arr[mind] > x) {//当中间的值大于你输入的要查找的值
                end = mind - 1;//把mind-1赋值给end
                mind = (front + end) / 2;//刷新一下中间的值
            } else if (arr[mind] < x) {
                front = mind + 1;
                mind = (front + end) / 2;
            }else if(arr[mind]==x) {
                System.out.println("查找成功"+mind);
                break ee;//结束ee的循环
              }
            }
        if(end<front){//当下界的数组的值小于上界的数组的值
           System.out.println("查找失败,数组中没有这个值。");
           break;
        }
    }}
}

标签:二分,end,int,mind,mid,查找,front
From: https://www.cnblogs.com/Starry-Sea/p/18370310

相关文章

  • 【C++二分查找 前缀和 】1292. 元素和小于等于阈值的正方形的最大边长
    本文涉及的基础知识点C++二分查找C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例包括课程视频LeetCode1292.元素和小于等于阈值的正方形的最大边长给你一个大小为mxn的矩阵mat和一个整数阈值threshold。请你返回元素总和小于或等于阈值的正方形区......
  • 信息学奥赛初赛天天练-69-NOIP2017普及组-完善程序2-切割绳子、二分答案、二分边界、
    1完善程序(单选题,每小题3分,共30分)切割绳子有n条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出m条长度相同的绳段,求绳段的最大长度是多少。(第一、二空2.5分,其余3分)输入:第一行是一个不超过100的正整数n,......
  • wqs 二分
    感觉是一个很神秘的东西。例题P2619[国家集训队]TreeI从\(m\)条边中选\(n-1\)条要求选恰好\(k\)条白边,且边集是原图生成树求边权和的最小值这题不算是dp,但还是记\(f_i\)为恰好选\(i\)条白边的最小代价。而wqs二分的要求是函数要具有凸性。简单版本就是选......
  • C语言学习--排序和查找
    提示:排序和查找算法是算法领域中最基本的概念之一,它们在数据组织、优化查询效率等方面发挥着至关重要的作用。目录前言12.1排序算法的介绍12.2冒泡排序12.2.1基本介绍12.2.2冒泡排序应用实例12.2.3分析冒泡的过程+代码12.3查找12.3.1介绍12.3.2案例演示12......
  • 【Linux】vim查找关键字
    在Linux下使用vim查找关键字命令非常简单。以下是一些常用的vim查找关键字命令:前向查找:按下“/”键,输入要查找的关键字,然后按下回车键。vim会自动定位到下一个匹配的关键字位置。向后查找:按下“?”键,输入要查找的关键字,然后按下回车键。vim会自动定位到上一个匹配的关键字位......
  • 【C++二分查找】1954. 收集足够苹果的最小花园周长
    本文涉及的基础知识点C++二分查找LeetCode1954.收集足够苹果的最小花园周长给你一个用无限二维网格表示的花园,每一个整数坐标处都有一棵苹果树。整数坐标(i,j)处的苹果树有|i|+|j|个苹果。你将会买下正中心坐标是(0,0)的一块正方形土地,且每条边都与两条坐......
  • 二分 查找
    二分查找https://leetcode.cn/problems/binary-search/思路这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想......
  • 二分查找算法详解及Python实现
    目录引言二分查找算法步骤二分查找的Python实现性能分析注意事项引言二分查找算法(BinarySearch)是一种在有序数组中查找某一特定元素的搜索算法。它的基本思想是:通过比较数组中间的元素与目标值的大小,将搜索区间缩小为一半,直到找到目标值或搜索区间被缩小为0。二分查......
  • 8.17日二分测试总结
    8.17日二分测试总结比赛传送门分数情况A.砍树B.买木头C.数列分段2D.吃冰棍E.跳石头F.奶牛晒衣服10080100\(_{没做:(}\)100总体分数\(_{很惨}\)T1.P1873[COCI2011/2012#5]EKO/砍树题目传送门问题分析运用二分答案与check函数check函数......
  • D46 2-SAT+线段树优化+二分 [ARC069F] Flags
    视频链接: [ARC069F]Flags-洛谷|计算机科学教育新生态(luogu.com.cn)//D462-SAT+线段树优化+二分O(nlognlogv)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#definemid((l+r)>>1)#definels(u<<1)#definer......