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

二分查找

时间:2024-10-20 19:19:11浏览次数:8  
标签:二分 arr right int mid 查找 left

1.好处

二分查找(折半查找)效率高,时间复杂度低,但是仅能用于有序数组

2.代码及其逻辑

二分查找的逻辑就是通过我们想要找到的值与中间量(mid)作比较,来不断缩小范围,如果说我们想要查找的值比中间量要大,那么我们就会取前半个区间,在进行一次与中间量的比较,不断的循环,就能找到我们想要查找的那个值,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,11,13,15};
int sz = sizeof(arr) / sizeof(arr[0]);
int right = sz - 1;
int left = 0;
int k = 0;
scanf("%d",&k);
while(left <= right)
{
int mid = (left + rgiht) / 2;
if (arr[mid] < k)
    left = mid + 1;
else if (arr[mid] > k)
    right = mid - 1;
else
{
    printf("找到了,下标是%d",mid);
    break;
}
if (left > right)
    printf("查找错误");
return 0;
}

这段代码中,left代表我们所取的区间中的最小值的编号,right则是最大值的编号,mid就是中间量,在刚刚开始查找时,先让我们想要查找的值与中间量arr[mid]进行比较,如果k > arr[mid],那么此时我们就应该把范围缩小,及left应该要等于mid + 1,这样我们的查找范围就缩小了一半,同理,当arr[mid] > k 时,我们就应该让right = mid - 1,如果正好arr[mid] = k,那就可以直接输出结果,到这里我们才算完成了一次查找,但一般情况下一次查找不能完成任务,所以我们要进行多次查找,当left  < right时,就说明还有数组中还有元素没有查找到,以循环条件就是当left <= right进入循环,当letf  > right 时,就说明该数组中没有我们要查找的元素,此时就可以输出结果,查找错误(这里没有考虑内存溢出的问题,就是非常浅薄的对二分查找的一个说明)

标签:二分,arr,right,int,mid,查找,left
From: https://blog.csdn.net/a15879106694/article/details/143096077

相关文章

  • 二分求操作后的最大最小中位数
    这类题是让你求对序列进行一系列操作之后的最小/最大中位数求最小中位数二分最小中位数,显然二分要符合mid越大越对,边界才能向下收缩。对于这个条件,我们选择计算小于等于当前mid的数才是对的,因为这样显然mid越大cnt越大,而符合这个条件,我们就不断收缩上界,直到达到第......
  • JSONPath,一个事半功倍的查找取数工具
    目录前言JSONPath介绍操作项筛选器运算符函数样本使用说明延伸前言日常在书写用例断言的时候,经常会遇到这样的场景:从结果中提取关键属性用于后续业务或者断言。一般遇到这类情况,处理方式基本都跟剥洋葱一样,遇到数组/集合,一层层循环读取,遇到对象套对象,一层层对象点......
  • Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改
     Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改成多分类。包含数据和代码,数据可以直接替换为自己的数据。如果用BiLSTM,程序中只需要把lstmlayer改为bilstmlayer即为BiLSTM网络,其他地方不需要任何改动。工作如下:1、加载数据集,一共为......
  • 茴香豆的茴有四种写法,那二分有几种写法?
    《编程珠玑》一书的作者JonBentley曾经说过:“90%的程序员无法正确实现二分查找算法...”,今天,本文将带领你会写二分。经典写法现在我们来求解这样一个通用的二分查找问题:有一个不下降序列$a$,我们要从其中所有找到大于等于$k$的数的最小的下标。boolcheck(intindex)......
  • 704.二分查找
    题目给定一个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,......
  • 【数据结构与算法】之二分查找
    二分查找(BinarySearch)是一种在有序数组中查找特定元素的搜索算法。它通过比较数组中间元素与目标值来工作,从而将搜索范围缩小到一半,也称折半查找,是一种非常高效的工作于有序数组的查找算法。本文主要介绍二分查找及其几个变种,包括基础版、改变版、平衡版和Java版,以及Leftmost......
  • python在word文档中插入题注和查找题注
    目录1、打开word文档2、在文档中为图片插入题注3、在文档中为表格插入题注4、遍历所有题注5、更新题注编号在自动化处理word时,可以使用脚本为word文档中图片和表格插入题注;也可以查找word文档中已经插入的题注,查看并修改。1、打开word文档importwin32com.clientas......
  • UOJ 80:二分图最大权匹配 ← KM算法
    【KM算法简介】Kuhn-Munkres算法,简称KM算法,是用于“二分图带权最大匹配问题”的经典算法。【题目来源】https://uoj.ac/problem/80【题目描述】从前一个和谐的班级,有nl个是男生,有nr个是女生。编号分别为1,……,nl和1,……,nr。有若干个这样的条件:第v个男生......
  • 二叉查找树和笛卡尔树
    目录二叉查找树定义作用操作查找插入删除缺点笛卡尔树定义操作构造二叉查找树定义​ 二叉查找树(BinarySearchTree,BST),又名二叉搜索树或二叉排序树。​ 它是一类特殊规定的二叉树,它应当满足以下条件:每个节点有唯一确定的权值非叶子节点的权值比其左子树中所有节点权值大非......
  • C. New Game (二分)
    时隔多年又做题了这不得来水一篇博客题意:给出n个数,取一段连续的数字,最大数和最小数的差不超过k,使得取的数最多。解:对于每一个数,找到第最后一个连续的且与其差值不大于k的数,数一数期间一共有几个,然后取最大值。实现上先处理出连续的段,对于每一个数,找到对应的段,二分找出差值不大于......