二分法查找

慕课软件质量保证与测试(习题集) 慕课金陵科技学院.软件质量保证与测试.期末复习.习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 软件测试的方法和技术2.3 单元测试2.4 课后作业3 黑盒测试3.1 黑盒测试概述3.2 等价类划分测试3.3 边界值测试3.4 错误推测法3.5 判定表驱动法3.6 因果图法3.7 场景法3.8 正交实验法3.9 单元测试 阅读详情

详解二分法查找

​ 首先,我们要明白二分法查找适用于一个有序的数组,在java的学习中,我们一般会先接触冒泡排序,使用冒泡排序对无序数组进行排序后再用二分查找去搜索目标数.

二分法查找原理

​ 针对一个有序数组,当我们需要搜索某一个目标数时,我可以一个一个进行遍历搜索,但是,这样会浪费太多计算机资源,并且效率较低,因此,我们需要一个更加高效的方式进行搜索.

​ 二分法查找是指将目标数与有序数组的中间数进行比较,如果中间数大于目标数,则说明目标数在中间数的前面,反之则在中间数后面,再以中间数的前半部(或者后半部)为一个新数组,取中间数与目标数判断,再取新数组再判断,如此循环下去后,直到中间数等于目标数,这样,目标数便找到了.

二分法查找演示

​ 如下图,针对{1,2,3,4,5,6,7,8,9}这样一个数组使用二分法查找8这个元素.

在这里插入图片描述

第一次查找:

​ 取{1,2,3,4,5,6,7,8,9}数组的中间数:5,与目标数8进行比较,8>5,说明目标数8位于{6,7,8,9}这个新数组内.

第二次查找:

​ 取{6,7,8,9}这个新数组的中间数:7(注意,由于只有4个数,我们取中间前一位的数作为中间数),与目标数8比较,发现8>7,说明目标数8位于{8,9}这个数组内.

第三次查找:

​ 取{8,9}这个数组的中间数:8,发现目标数8等于中间数,因此找到了.

几个需要关注的地方

  1. 一个含n个元素的数组(或者说一个长度为n的数组),n为奇数,最多需要((n-1)/2)次查找即可找到目标数,n为偶数最多需要(n/2)次查找即可找到目标数.
  2. 编写代码时注意循环终止条件为中间数等于目标数.

Java代码

class BinarySearch{
	public static void main(String[] args){
		//定义1个数组作为目标数组
		int[]arr = {1,2,3,11,5,6,7,8,9,10};
		//定义1个int变量作为查找的元素
		int i = 11;
		//调用方法,定义变量接收方法的返回值
		int s = binary(MaoP.mao(arr),i);
		//打印
		System.out.println("你查找的元素索引为:"+s);
	}
	//定义1个方法,使用二分法查询某个元素的索引
	static int binary(int[] arr1,int a){
		//定义1个int变量表示二分法中最大索引
		int maxIndex = arr1.length - 1;
		//定义1个int变量表示二分法中最小索引
		int minIndex = 0;
		//定义1个int变量表示二分法中的中间索引
		int halfIndex = minIndex+(maxIndex-minIndex)/2;
		//循环(一般来讲是死循环,但是当查询的元素不位于目标数组中时,会跳出循环)
		while(minIndex <= maxIndex){
			//如果中间索引位置的元素与目标值相等,则返回索引并退出方法
			if (arr1[halfIndex] == a){
				return halfIndex;
			//如果中间索引位置值小于目标值,则说明被查找元素位于中间索引位置右侧,最小索引等于中间索引加1
			}else if(arr1[halfIndex] < a){
				minIndex = halfIndex + 1;
			//如果中间索引位置值大于目标值,则说明被查找元素位于中间索引位置左侧,最大索引等于中间索引减1
			}else{
				maxIndex = halfIndex - 1;
			}
			//未找到,重新给中间索引赋值
			halfIndex = minIndex+(maxIndex-minIndex)/2;
		}
		//未找到返回-1
		return -1;
	}
}

拓展之二维数组的二分法查询

​ 有兴趣的读者可以看一下,如有错误还请谅解

class TwoDimensionalSearch {
	public static void main(String[] args){
	//定义需要查询的数
	int a = 1;
	/*
	定义一个二维数组.(每个一维数组的长度相同),
	每一行都按照从左到右递增的顺序排序,每一列
	都按照从上到下递增的顺序排序
	*/
	int[][] arr ={{1,2,3,4,5},
				 {6,7,8,9,10},
				 {11,12,13,14,15},
				 {16,17,18,19,20},
				 {21,22,23,24,25}};
	//调用方法
	Find(a,arr);
	}
	//定义1个方法查找二维数组中是否存在查询的数
    static int Find(int i, int [][] array) {
		//定义外层数组的最小,最大,中间索引
		int minIndex = 0;
		int maxIndex = array.length-1;
		int halfIndex = minIndex+(maxIndex-minIndex)/2;
		//定义内层数组的最小,最大,中间索引
		int min = 0;
		int max = array[0].length-1;
		int half = min+(max-min)/2;
		//外层循环,控制外层数组二分法查询
		while(minIndex <= maxIndex){
			//内层循环,控制内层数组二分法查询是否有被查询的数
			while(min <= max){
				//如果有,输出ok,跳出方法,返回0
				if (i == array[halfIndex][half]){
					System.out.println("查询到该数!");
					return 0;
				}else if (i > array[halfIndex][half]){
					min = half + 1;
				}else{
					max = half -1;
				}
				half = min+(max-min)/2;
			}
			//重新给内层数组的最小,最大,中间索引赋值,使得下次循环内层数组时,各个索引值为初始值
			min = 0;
			max = array[0].length-1;
			half = min+(max-min)/2;
			//如果未在当前内层数组查询到该数,则判断该数位于该内层数组后面的数组中
			if (i  > array[halfIndex][min]){
				minIndex = halfIndex + 1;
			//如果未在当前内层数组查询到该数,则判断该数位于该内层数组前面的数组中
			}else if (i  < array[halfIndex][max]){
				maxIndex = halfIndex - 1;
			}
			halfIndex = minIndex+(maxIndex-minIndex)/2;
		}
		//如果循环到最后都未找到,打印结果
		System.out.println("未查询到该数!");
		return -1;
    }
}
CosyVoice语音合成使用教程 CosyVoice是一款开源的语音合成工具,它基于深度学习模型,能够生成高度逼真的语音内容。该工具支持多种语言的语音生成,包括中文、英文、日文、粤语和韩语。CosyVoice的亮点在于它对生成语音情感和韵律的精细控制,通过富文本或自然语言输入,可以显著提升合成语音的情感表达能力。CosyVoice提供了多种预训练模型,用户可以根据需求选择合适的模型。:基底模型,适用于一般语音合成任务。:经过SFT微调的模型,适用于特定音色和情感的语音合成。:支持Instruct微调的模型,适用于自然语言控制的语音合成。 阅读详情

相关推荐

MST-GAT: Enhancing Anomaly Detection in Multimodal Time Series with Intra- and Inter-Modal Attention

本文深入解析了MST-GAT模型,这是一种通过模态内与模态间注意力机制增强多模态时间序列异常检测的新方法。它通过构建图结构显式建模传感器间的复杂时空依赖,并结合时间卷积网络与联合优化策略,有效降低了传统方法中常见的误报与漏报问题,在工业监控等场景中展现出卓越性能。

weixin_29079671的博客 140

二分查找算法总结

二分算法

keepstrivingchy的博客 2665

深入解析西门子S7通信协议:从抓包到实战应用

本文深入解析西门子S7通信协议,从环境搭建、抓包分析到实战应用,提供了一套完整的协议分析方法。通过Wireshark工具进行抓包分析,详细拆解了S7协议各层结构,并结合真实案例,展示了如何利用抓包技术解决通信故障、优化性能及进行安全审计,是掌握工业通信底层原理的实用指南。

weixin_29224529的博客 277

二分查找(C语言实现)

二分查找

m0_64538862的博客 2万+

告别第三方工具!用Windows自带蓝牙玩转BLE设备调试(保姆级图文教程)

本文详细介绍了如何利用Windows自带的蓝牙功能进行BLE设备调试,无需第三方工具。从硬件准备、系统配置到实战操作,提供保姆级图文教程,帮助开发者高效完成设备发现、数据交互等全流程调试工作。特别适合物联网开发者和智能硬件爱好者。

o5p6q的博客 720

OMI数据获取与可视化:从下载到大气污染分析

本文详细介绍了如何获取与处理OMI卫星数据,以进行大气污染分析。内容涵盖从NASA GES DISC官方源下载对流层NO2数据、使用MATLAB或Python进行月均数据处理与网格化,到利用m_map或cartopy工具进行专业可视化的完整流程。重点解析了数据下载技巧、NetCDF格式处理、地图投影与填色方法,并探讨了时间序列分析与动态可视化等深度应用,为环境研究者提供了一套从数据到洞察的实用指南。

weixin_29210759的博客 262

二分查找--图文详解

二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。

iLoyo_的博客 3万+

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2523

【算法】 二分查找

二分查找 看着是个最简单的算法 没想到细节很头疼 细节是魔鬼啊 leecode标准二分查找 内存占用很大?? 注意, lo 可以== hi left > right (这种情况发生于当left, mid, right指向同一个数时,这个数还不是目标值,则整个查找结束。) 注意 循环条件: left <= right 中间位置计算: mid = left + ((right -left) >> 1) 左边界更新:left = mid + 1 右边界更新: right = m

突围 3182

CDD数据库文件制作(二)——DTC配置

1.DTC库 2.新建DTC DTC相关介绍:https://blog.csdn.net/LOVE135149/article/details/122565443 ① 选择DTC数据库 ② 点击新建DTC ③ DTC参数编辑 3.将DTC库中的DTC加载到Variant中 找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy … Reference from Available DTCs…,即可将DTC库中的故障码加载至Variant中。 虽然选择Co

LOVE135149的博客 1万+

TMS320F28335调试跟踪的问题:DSP从上电复位,一直到执行main()的第一条语句之间,都干了些什么,以及CCS调试时程序查找的问题

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1205

C语言二分法查找

二分查找也叫折半查找 典型算法: 算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值n,从序列的中间位置mid开始比较, 如果当前位置arr[mid]值等于n,则查找成功; 若n小于当前位置值arr[mid],则在数列的前半段中查找,arr[left,mid-1]; 若n大于当前位置值arr[mid],则在数列的后半段中继续查找arr[left+1,right], 直到找到为止,时间复杂度:O(log(n)) 。 解题思路: 给定一个数组ar

XSAAA的博客 2万+

ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】

ofd转pdf报错:java.lang.NoClassDefFoundError:org/apache/commons/io/function/IOIterator at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress,java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry()

黄团团的个人博客 1280

PHP之二分法查找

二分法查找 题目:给出一个如下有序数组,使用PHP代码编写一个函数,查找出指定元素(如,6)的位置。 $array = array(2, 3, 6, 8, 13, 16, 23, 27, 39, 40); 做笔试的时候遇到,当时脑子短路,二分法查找写不出来,只知道原理(总不能把原理写出来吧???)。当时想着试卷不能留空啊,所以就用一个foreach遍历查找出来,后来大佬问起来,只能说忘了(好尴尬)...

Godfrey 的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Leetcode】二分法查找

二分法查找 给定一个 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 提示: 你可以假设

apple_51673523的博客 2806

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

二分法查找与递归下的二分法查找

2020.2.9 13:14 二分法 定义:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较, 如果当前位置arr[k]值等于key,则查找成功; 若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1]; 若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high], 直到...

qq_40645674的博客 1114

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js二分法查找

1).二分法查找简介 二分法查找又称折半查找,一般用在查找一个有序数列中某个特定的元素。 2).二分法查找原理 每次取有序数列中间的值作为找到对象,和要查值key进行比较。 若中间值小于要查询值key,则取中间值右侧数列的中间值继续key比较。若中间值等于要查询值key,则取查询完成。若中间值大于要查询值key,则取中间值左侧数列的中间值继续key比较。 采用递归重复上面操作… 直到查到结果为止。 3).二分法程序设计 /** * arr 有序数列 * low 数列首项标记

qq_37280949的博客 1237

算法——二分法查找(binarySearch)

二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。(3)如果某一步数组为空,则表示找不到目标元素。二分法查找的时间复杂度O(logn)。非递归算法:func...

u012194956的博客 17万+

python实现二分法查找_python3 二分法查找

'''二分法查找有序列表掐头去尾取中间查找列表中xx在不在列表中,在,则返回索引值'''# lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54, 67, 89, 99] #使用in判断,不使用二分法# n = 49# for i, v in enumerate(lst):# if v == n:# print("找到了,索引为%...

weixin_39917046的博客 756

python二分法查找-Python 二分法查找

# 二分法查找主要的作用就是查找元素lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据num = int(input("请输入你要查找的元素信息:"))for el in lst:if num == el:print("存在")breakelse:print("不存在")len(lst)# 0 1 2 3 4...

weixin_40006963的博客 689

python二分法查找算法_查找算法之 '二分法查找'

二分法查找二分法查找适用于数据量较大时,但是数据需要先排好顺序。算法原理一维有序数组,折半查找假如有一组数为3,12,24,36,55,68,75,88 要查给定的值24,可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)// 2 。1.开始令 front=0(指向3),end=7(指向88),则mid=3(指向36) 。因为 alist[mid]...

weixin_39926191的博客 508

python 二分法查找

二分法的适用条件 二分法查找适用于数据量较大时, 但是数据需要先排好顺序.   优点: 二分法查找效率特别高   缺点: 二分法只适用于有序序列 二分法的主要思想是: 设查找的数组区间为array[low, high] (1)确定该区间的中间位置k (2)将查找的值T与array[k]比较. 若相等, 查找成功返回此位置, 否则确定新的查找区域, 继续二分查找。区域确定如下: T < ar...

lijihao_10086的博客 1903

Java查找算法:二分法查找

思路 二分法查找的目标数组必须为有序数组,以一个从小到大排列的数组为例: 首先确定该数组的中间下标mid = (left + right) / 2 然后用查找目标数targetVal和arr[mid]比较 targetVal> arr[mid],查找的目标数在mid右边 targetval < arr[mid],查找的目标数在mid左边 targetVal = arr[mid],找到目标数 代码 package com.leolee.dataStructure.sear.

保暖透气大裤衩LeoLee的博客 653

Java二分法查找

二分法查找(Binary Search),当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24....

null_able的博客 176

java的二分法查找实现

二分法 原因: 当数据量很大适宜采用该方法。采用二分法查找时,数据需要是排好序的。 int[] arr = {12,34,56,78,90,24,67,43,75,20,89,98};//这种未排序的不能使用 排好序时为:[12, 20, 24, 34, 43, 56, 67, 75, 78, 89, 90, 98] 以查找43为例: 先选取12—98区间的中间值56,43<56,从12—...

dragoned_123的博客 1712

python二分法查找-python之二分法查找

二分法查找主要的作用就是查找元素规则. 掐头结尾取中间, 必须是有序列# 二分法查找 (需要你明白和掌握)# lst = [1,3,5,7,12,36,68,79]# n = int(input("请输入一个数"))## left = 0# right = len(lst) - 1## while left lst[mid]:# left = mid + 1#...

weixin_39846553的博客 559
上一篇: 详解-java冒泡排序
下一篇: 面向对象初体验
Sign_L
博客等级 码龄8年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值