【数据结构与算法】—— 二分查找

  1. 二分查找的概念 二分查找指的是在排好序的数组中,找到目标元素。如果元素存在则返回元素的下标,不存在则返回-1. 下面以升序为例进行简单描述
  2. 查找过程: 取数组中间元素与查找元素target比较。如果target等于中间元素则直接返回中间元素的下标,如果target小于数组中间元素则在数组左边查找,如果target大于数组中间元素则在右边查找。重复以上步骤。
  3. 二分查找的时间复杂度 O(logn)
  4. Java实现 4.1 迭代版本
1public int searchByLoop(int[] arr, int target) { 2 return searchByLoop(arr, 0, arr.length - 1, target); 3} 4 5private int searchByLoop(int[] arr, int low, int high, int target) { 6 while (low <= high) { 7 int mid = (low + high) / 2; 8 if (target == arr[mid]) { 9 return mid; 10 } else if (target < arr[mid]) { 11 high = mid - 1; 12 } else { 13 low = mid + 1; 14 } 15 } 16 return -1; 17}

4.2 递归版本

1public int searchByRecursion(int[] arr, int target) { 2 return searchByRecursion(arr, 0, arr.length - 1, target); 3} 4 5private int searchByRecursion(int[] arr, int low, int high, int target) { 6 int mid = (low + high) / 2; 7 if (target == arr[mid]) { 8 return mid; 9 } 10 if (low > high) { 11 return -1; 12 } 13 if (target < arr[mid]) { 14 return searchByRecursion(arr, low, mid - 1, target); 15 } 16 return searchByRecursion(arr, mid + 1, high, target); 17} 18
  1. 数据结构系列代码地址 Github:https://github.com/bennetty74...
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

javaScript. Dom 基本操作

DOM节点查找jsdocument.getElementById()//通过id查找document.getElementsByTagName()//通过标签名document.getElementsByName()//通过name名查找document.getElementsByClassName("类名")//通过类名获取元素对象documen

折半查找-Python版(二分查找)

介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。前提必须待查找的序列有序时间复杂度O(log2n)原理1)确定该期间的中间位置K2)将查找的值t与arrayk比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分

7 二分搜索树的原理与Java源码实现

1折半查找法了解二叉查找树之前,先来看看折半查找法,也叫二分查找法在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引。如下:intarrnewint{1,3,4,6,8,9};在arr数组中查找6这个元素,查到返回对应的索引,没有找到就返回1思想很简单:1先找到数组中间元素ta