二分查找法

c++二分查找法 二分查找法是从区间[i,j]上连续不断将sum(a)·sum(b)<0的函数ans=sum(x),通过循环实现把函数sum(x)的0点所在区间一分为二,如此循环,使区间[i,j]的两个端点逐渐像0点靠近,得到0点近似值的方法。可以实现空间优化,适用于数据较大的题目。时间复杂第O(log(2n))。 在使用c++的二分查找法,要先将数据排序,二分查找法的基本思想可以这样总结:我们设数据是按升序... 阅读详情



  1. 二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。
  2. 二分查找的一个条件是待查询的数组是有序的,我们假设这里的数组是升序的。
  3. 二分查找的主要思路就是设定两个指针start和end分别指向数组元素的收尾两端,然后比较数组中间结点arry[mid]和待查找元素。如果待查找元素小于中间元素,那么表明带查找元素在数组的前半段,那么将end=mid-1,如果待查找元素大于中间元素,那么表明该元素在数组的后半段,将start=mid+1;如果中间元素等于待查找元素,那么返回mid的值
  4. int BinarySearchRecursion(int arry[],int &value,int &start,int &end)
  5. {
  6.     if(start>end)
  7.         return -1;
  8.     int mid=start+(end-start)/2;
  9.     if(arry[mid]==value)
  10.         return mid;
  11.     else if(value<arry[mid])
  12.     {
  13.         end=mid-1;
  14.         return BinarySearchRecursion(arry,value,start,end);
  15.     }
  16.     else
  17.     {
  18.         start=mid+1;
  19.         return BinarySearchRecursion(arry,value,start,end);
  20.     }
  21. }
  22. int BinarySearchRecursion(int arry[],int &len,int &value)
  23. {
  24.     //如果传入的数组为空或者数组长度<=0那么就返回-1。防御性编程
  25.     if(arry==NULL||len<=0)
  26.         return -1;
  27.     int start=0;
  28.     int end=len-1;
  29.     return BinarySearchRecursion(arry,value,start,end);
  30. }
  31. void main()
  32. {
  33.     int arry[]={1,2,3,4,5,6,7,8};
  34.     int len=sizeof(arry)/sizeof(int);
  35.     int especteNum1=4;
  36.     int especteNum2=9;
  37.     int index=BinarySearch(arry,len,especteNum1);
  38.     cout<<"index:"<<index<<endl;
  39.     int index2=BinarySearchRecursion(arry,len,especteNum2);
  40.     cout<<"index2:"<<index2<<endl;
  41.     system("pause");
  42. }

  43. int BinarySearchRecursion(int arry[],int value,int start,int end)



二分查找法(递归和非递归实现) 二分查找发:      二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。(借鉴百度百科)时间复杂度为:log2n,即log以2为底,n的对数。      1.递归方式完成二分查找法:         /** * 递归方法实现二分查找法. * @p 阅读详情

相关推荐

STM32F103用软件I2C读取IP2366电量数据,实测避坑指南(附完整源码)

本文详细介绍了如何使用STM32F103的软件I2C驱动读取IP2366电池管理芯片的电量数据,包括GPIO初始化、I2C时序实现、关键延时优化及常见问题解决方案。通过实测避坑指南和完整源码,帮助开发者快速实现稳定的电量数据读取,适用于嵌入式电池管理系统开发。

weixin_33725722的博客 514

iOS 排序算法总结、二分法查找

本文均是自己终结,查考网址:http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.5.1.1.htm 还有一个:二分插入排序 平均时间O(n2) 稳定 1、插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数...

aihuangfu1459的博客 243

内存|内存的概念、内存的作用、内存的物理结构及内存使用

内存是硬件,是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。内存是与CPU沟通的桥梁,计算机中所有程序的运行都要依靠内存,内存对计算机的影响非常大。本文简单介绍了内存的概念、作用、物理结构以及使用,内存远不止如此,后续文章会逐步深入讲解。

qq_59938293的博客 2万+

二分查找算法(OC版--非递归实现)

闲来无事,歇歇二分查找算法 // // ViewController.m // BinarySearch // // Created by bcc_cae on 16/3/25. // Copyright © 2016年 bcc_cae. All rights reserved. // #import "ViewController.h" @interface ViewControl

jasonjwl的专栏 2098

LangGraph实战:用Python异步构建智能客服多轮对话系统(附完整代码)

本文详细介绍了如何使用LangGraph框架和Python异步编程构建一个高性能的智能客服多轮对话系统。通过将对话流程建模为有向图,结合thread_id实现多用户对话隔离,并利用异步节点提升系统并发处理能力,有效解决了传统客服系统上下文遗忘与高并发瓶颈问题。文章提供了从环境搭建、状态管理、异步优化到复杂业务逻辑与部署的完整实战代码。

weixin_29055137的博客 149

基于TI MSPM0的PS2双轴按键摇杆模块ADC+GPIO驱动移植实战

本文详细介绍了在TI MSPM0微控制器上驱动PS2双轴按键摇杆模块的完整实战流程。通过SysConfig图形化工具配置ADC与GPIO引脚,并编写了包含ADC采样、按键检测及数据处理的驱动代码,实现了对摇杆X/Y轴模拟量及按键数字量的稳定读取,为嵌入式控制项目提供了可直接移植的解决方案。

weixin_42465140的博客 83

二分查找iOS

二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的。它的基础思想:获取数组的中间值,将数组分割成两份,利用查找的值跟中间值进行比较,如果查找的值大于中间值,就在数组的右边进行查找;如果查找的值小于中间值,就在数组的左边进行查找。如此循环的执行下去,最终找到符合的值。 二分查找 优点:1.速度快 2.比较次数少 3.性能好 缺点: ...

weixin_30644369的博客 143

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2289

c语言实现二分查找法

目录 一.前言 二.二分查找法 1.什么是二分查找法 2.如何用c语言来实现二分查找法 三.总结 一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6,7,8,9"这九个数组成的数组来说,假如我们想寻找'2',那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找'7',我们继续用从小到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。 二.二分查找法 1.什么是二分查找法 二分查找

weixin_64448174的博客 1万+

力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.4.5 企业版 旗舰版

JNPF作为作为一款深受用户喜爱的低代码产品,凭借雄厚的科研技术力量、丰富的软件开发项目经验、严谨的项目开发流程和高质量的售后服务,已成功帮助千家企业完成数字化项目,建立了覆盖不同行业客户和不同发展阶段的软件产品服务体系。

huoooos0的博客 1839

基于POD和神经网络的多工况温度场重构反演系统

本文提出了一种基于本征正交分解(POD)和神经网络的多工况温度场重构反演系统。该系统通过POD方法从多工况温度场数据中提取主要特征模态,构建神经网络模型建立工况参数与POD模态系数的映射关系,实现温度场的快速重构。系统采用Python实现,包含数据预处理、POD分解、神经网络训练和温度场重构等模块。实验结果表明,该方法能够有效降低计算复杂度,实现高精度的温度场预测。

huanghm88的专栏 276

Java算法之二分查找法

本章介绍Java实现二分查找法,欢迎各位同学转载,但转载务必注明出处:https://blog.youkuaiyun.com/qq_35101450/article/details/89194473,谢谢~ 什么是二分查找法 二分查找法也叫折半查找法,是一种效率比较高的查找方法,它要求被查找的数组是有序的。 二分查找原理 案例:大家应该都玩过猜数字游戏吧,比如我们要从1到100找出某一个数,一般我们会...

科科然的博客 1812

在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案

本文主要介绍了在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

二分查找法详解,解析二分查找法

作者最近突然想到了二分查找法,今天进拿出来跟大家分享一下 二分查找法顾名思义就是把列表分成两份进行查找,即先定义个最小下标start=0和一个最大下标end = len(list),然后通过相加对2求余或者除以2在转换为int类型转换为整数,这个随心而定,即center=(start+end)//2或者center=int((start+end)/2)然后得到list[center]的值,判断它...

z_xiaochuan的博客 2526

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数组二分查找法

数组二分查找法 1.二分查找法思想 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x. 2.二分查找法示例 public class MindArray { public static void ...

Bruce小鬼 2028

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java:二分查找法

工作原理 它又被称之为折半查找法。将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程,直到找到或找不到位置。 与线性查找法的对比 线性查找法遍历数组中的每一个元素,从一段开始逐一检查每个元素,直到找到所需元素位置。 二分查找法则不...

安利不求人 530

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java二分查找法_java算法-二分查找法

二分查找法的前提是数据必须是有序排列的数据,如果不是那将失去二分查找法的意义。其中二分查找法有两种实现方式while、递归方法实现。下面我们来看下它的代码。public class maxtest {public static void main(String[] args) {//###################二分查找法start###################//int[] ar...

weixin_42169674的博客 411

Java实现二分查找法

对于无序的数组,二分查找法是行不通的,因为二分查找法的前提条件就是:有序。 代码: /** * 二分查找的实现 * * @param array 待查找的数组 * @param searchNum 待查找的数字 * @return 查找的结果,为正数的时候,表示下标,-1表示没找到 */ static int binarySearchImpl(int[] array, int searchNum) { int low = 0; int high = array.length - 1; in

weixin_45673552的博客 227

算法:你不知道的二分查找法的那些事

jk

Adorablenewbaby的博客 367

java 二分查找法

二分查找法,又称折半查找法,其算法思想是: 在有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。值得注意的是,数组必须是有序的,如果是无序数组二分查找法就会出错,这也算是二分查找法的缺点之一。 public class Test001 { public static Integer count = 0; public stat...

91奔跑的蜗牛 212
上一篇: 本地通知 UILocalNotification的使用
下一篇: MRC 和 ARC 的互转
Magical_master
博客等级 码龄11年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值