二分法查找和普通查找

一、普通查找

  对于数组和一个需要查找的元素来说,普通查找的原理很简单,即为从数组的第一个元素到最后一个元素进行遍历,如果第i个元素的值等于我们需要查找的值,那么返回找到的角标i,否则返回-1表示没有查找到。这里以java为例,普通查找代码如下:

 1 package Daily_practice;
 2 
 3 public class Array_Search {
 4 
 5     public static void main(String[] args) {
 6         int[] arr1 = {33,19,15,28,106,45,78,13};
 7         //普通查找
 8         int index1 = getIndex(arr1,28);
 9         System.out.println(index1);
10     }
11     //普通查找,返回值所在的角标,不存在返回-1
12     public static int getIndex(int[] arr,int value)
13     //value为需要查找的值
14     {
15         for(int i=0;i<arr.length;i++)
16         {
17             if(arr[i] == value)
18                 return i;
19         }
20         return -1;
21     }
22 }

二、二分法查找

  二分法是从中间元素开始查找,假设整型数组为arr,要查找的元素为value,数组中间元素为arr[mid],若value小于arr[mid],则在左半边继续查找;若value大于arr[mid],则在右半边继续查找,如此循环,知道value等于arr[mid],返回的角标mid即为要找的元素的位置。java代码如下:

 1 package Daily_practice;
 2 
 3 public class Array_Search1 {
 4 
 5     public static void main(String[] args) {
 6         int[] arr2 = {13,15,19,28,33,45,78,106};
 7         //二分法查找
 8         int index2 = halfSearch(arr2,28);
 9         System.out.println(index2);
10     }
11     
12     //二分法查找
13     public static int halfSearch(int[] arr,int value)
14     {
15         int min,mid,max;
16         min = 0;
17         max = arr.length-1;
18         mid = (min+max)/2;
19         while(arr[mid] != value)
20         {
21             if(value > arr[mid])
22                 min = mid + 1;
23             else
24                 max = mid - 1;
25             if(max < min)
26                 return -1;
27             mid = (min+max)/2;
28         }
29         return mid;
30     }
31 
32 }

三、二分法查找和普通查找的优缺点分析

  •普通查找

  优点:1)原理简单,代码容易实现

        2)不需要数组有序

  缺点:1)当元素个数很多时,效率较低

 

  •二分法查找

  优点:1)效率比普通查找高

  缺点:1)要求数组必须是有序排列

四、总结

  两种方法各有优点和局限,至于具体用哪一种请读者根据实际情况而定,文中若有不恰当之处请批评指正!

转载于:https://www.cnblogs.com/yaoHongBo/p/7456630.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下安装zookeeper集群(奇数个)

1、 解压zookeeper压缩包 2、 data里创建“myid”文件&#xff08;命令touch myid&#xff09;&#xff0c;内容是1&#xff08;命令 echo 1 >> myid&#xff09; 3、 zoo.cnf里配置dataDir、clientport、server.nIP:端口1&#xff08;2881&#xff09;&#xff1a;端…

立体标定

立体标定应用标定数据转换成深度图标定 由于摄像头目前是我们手动进行定位的&#xff0c;我们现在还不知道两张图像与世界坐标之间的耦合关系&#xff0c;所以下一步要进行的是标定&#xff0c;用来确定分别获取两个摄像头的内部参数&#xff0c;并且根据两个摄像头在同一个世…

if _name_ == _main_

1.作用 py文件有2种使用方法&#xff0c;第1是自己本脚本自己独立执行&#xff1b;第2是被import到其他文件脚本中执行. if _name_ " _main_" 该语句控制其他下一步的脚本是否执行。如果是自己本脚本独立执行&#xff0c;那就运行该if条件下的脚本&#xff1b;如果…

LLVM完整参考安装

文章目录 一、直接下载编译好的,见图片命令二、下载源代码自己编译安装 下面提供下载并mv完全的文件包三、安装LLVM编译器一、直接下载编译好的,见图片命令 这里使用llvm官网编译好的包, 直接解压即可用LLVM下载官网点击这里下载llvm-6.0.1 下载完成后解压tar -vxf clangllv…

微软正式释出基于 Chromium 的 Edge 预览版本

百度智能云域名服务&#xff0c;.com新用户首购仅需25元 微软基于 Chromium 的全新版本 Edge 一直吸引着开发者与用户的目光&#xff0c;当地时间 8 日&#xff0c;官方终于释出了第一个 Dev 和 Canary 频道构建版本。 Dev 与 Canary build 都是开发者预览版&#xff0c;同属…

下载和安装R、RStudio !

现如今&#xff0c;R语言是统计领域广泛使用的工具&#xff0c;是属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是用于统计计算和统计绘图的优秀工具。而RStudio是R的集成开发环境&#xff0c;用它进行R编程的学习和实践会更加轻松和方便。下面就教大家如何下载并…

豆瓣首页话题输入框的实现

在做问答的时候&#xff0c;遇到一个需求&#xff0c;用户的问题需要限制字数&#xff0c;不仅显示计算的超出字数&#xff0c;还需在超出的内容上加一些提醒的效果&#xff0c;例如豆瓣首页的话题输入框&#xff0c;抽时间研究了下&#xff0c;需要考虑下面几个问题&#xff1…

pytorch 吸烟检测yolov5s

YOLOV5s 吸烟目标检测 参考学习 文章目录 本原创项目长期更新&#xff0c;旨在完成校园异常行为实时精检测&#xff0c;作到集成N次开发优化&#xff08;不止局限于调包&#xff09;为止&#xff0c;近期将不断更新如下模型数据标注文件教程。关注博主&#xff0c;Star 一下g…

JQuery的ajax函数执行失败,alert函数弹框一闪而过

先查看<form>标签是否有action属性&#xff0c;如果没有&#xff0c;并且最后<button>标签的type属性为submit‘时&#xff0c;默认提交位置就是当前页面 如果在页面右键检查&#xff0c;点击网络&#xff0c;会在开头发现这样的post包&#xff1a; 在右侧消息头处…

C#中Request.ServerVariables详细说明及代理

Request.ServerVariables("Url") 返回服务器地址Request.ServerVariables("Path_Info") 客户端提供的路径信息Request.ServerVariables("Appl_Physical_Path") 与应用程序元数据库路径相应的物理路径Request.ServerVariables("Path_Transla…

coco与voc相互转化

把LabelImg标注的YOLO格式标签转化为VOC格式标签 和 把VOC格式标签转化为YOLO格式标签 点亮&#xff5e;黑夜 2020-07-07 11:08:24 3537 已收藏 90 分类专栏&#xff1a; 19—目标检测 文章标签&#xff1a; voc yolo 版权 把LabelImg标注的YOLO格式标签转化为VOC格式标签 和…

angular中封装fancyBox(图片预览)

首先在官网下载最新版的fancyBox(一定要去最新网站&#xff0c;以前依赖的jquery版本偏低)&#xff0c;附上链接&#xff1a;http://fancyapps.com/fancybox/3/ 然后在项目中引用jquery&#xff0c;然后在引用jquery.fancybox.min.css和jquery.fancybox.min.js。 如果需要动画和…

十二省联考题解 - JLOI2019 题解

十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀两点异或 可以想到使用二分答案的方法可持久化Trie解决&#xff0c;但是时间复杂度为$n\log^2 (…

前端vue的get和post请求

vue的get和post需要两个文件vue.js和vue-resource.js 以下是实现的代码&#xff0c;可以参考一下&#xff0c;需要注意的接口的请求需要考虑跨域的问题&#xff0c;其次就是访问页面需要在tomcat下访问&#xff0c;否则也会报跨域的问题 <!DOCTYPE html> <html lang&q…

[Vijos 1143]三取方格数

Description 设有N*N的方格图&#xff0c;我们将其中的某些方格填入正整数&#xff0c; 而其他的方格中放入0。 某人从图得左上角出发&#xff0c;可以向下走&#xff0c;也可以向右走&#xff0c;直到到达右下角。 在走过的路上&#xff0c;他取走了方格中的数。&#xff08;取…

线扫相机相关规格说明

工业线阵相机与面阵相机特点分析 点滴成海~ 2018-06-29 13:50:38 12184 收藏 29 分类专栏&#xff1a; intership 文章标签&#xff1a; 视觉元件分析 版权 最近在公司实习&#xff0c;实习中的项目是使用的是微视的一款线阵相机&#xff08;Microview MVC1024DLM-GE35&…

postgresql 不同数据库不同模式下的数据迁移

编写不容易,转载请注明出处谢谢, 数据迁移 因为之前爬虫的时候&#xff0c;一部分数据并没有上传到服务器&#xff0c;在本地。本来用的就是postgresql&#xff0c;也没用多久&#xff0c;数据迁移的时候&#xff0c;也遇到了很多问题&#xff0c;第一次使pg_dump xx > file…

Oracle中主键自增长

最近在学习Oracle和MySql&#xff0c;MySql有自动配置主键自增长auto_increment&#xff0c;这样在输入数据的时候可以不考虑主键的添加&#xff0c;方便对数据库的操作。 在Oracle中设置自增长首先用到sequence序列&#xff1b; 以创建学生表为例&#xff1a; create table St…

3.单例模式

public class Singleton {//定义私有的静态变量 private static Singleton singleton;//私有化构造函数private Singleton(){}//获取实例public static Singleton getInstance(){//同步前判断避免同步的性能损耗if(nullsingleton){//预防多线程问题synchronized(Singleton.clas…

docker与mmdetection

这里不再介绍 mmdetection 的安装和配置&#xff0c;使用 mmdetection 较简单的方法是使用已安装 mmdetection 的 docker 容器。这样直接省去了安装 mmdetection 的过程&#xff0c;让重心放在模型训练上&#xff01; 如果你对 docker 和 mmdetection 还不是很熟悉&#xff0c…