题目:
已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路:
递归和非递归

1.代码如下 BinSearch .java:

package com.yuhl.right;/*** @author yuhl* @Date 2020/10/24 21:59* @Classname BinSearch* @Description 二分查找,前提是数组为有序的,找到小搜索的元素的下标,如果不存在则返回-1*/
public class BinSearch {public static void main(String[] args) {int[] arr = {2, 4, 6, 8};//非递归查询int index = binSearch(arr, 8);System.out.println(index);System.out.println("======================================");//递归查询int reIndex = reBinSearch(arr, 8,1,arr.length-1);System.out.println(reIndex);}/*** 采用分支的思想,O(logN)** @param arr 数组* @param key 搜索值* @return*/public static int binSearch(int[] arr, int key) {int low = 0;int high = arr.length - 1;int middle = 0;if (key < arr[low] || key > arr[high] || low > high) {return -1;}while (low <= high) {middle = (low + high) / 2;if (arr[middle] > key) {high = middle - 1;} else if (arr[middle] < key) {low = middle + 1;} else {return middle;}}return -1;}/*** 地柜二分查找** @param arr 数组* @param key 搜索的值* @param low* @param high* @return*/public static int reBinSearch(int[] arr, int key, int low, int high) {if (key < arr[low] || key > arr[high] || low > high) {return -1;}int middle = (low + high) / 2;            //初始中间位置if (arr[middle] > key) {//比关键字大则关键字在左区域return reBinSearch(arr, key, low, middle - 1);} else if (arr[middle] < key) {//比关键字小则关键字在右区域return reBinSearch(arr, key, middle + 1, high);} else {return middle;}}
}

2.执行结果:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"
3
======================================
3

算法006:二分查找 递归、非递归相关推荐

  1. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  2. 二分查找原理非递归与递归实现【转载】

    二分查找 实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引). 解题步骤: 定义3个用来记录索引值的变量,变量min记录当前范围最小索引值,初始值为0:变量max记录当前范围最大 ...

  3. vue 怎么样不重复往数组里插入数据_前端数据结构与算法(1) -二分查找vs二叉树...

    今天给大家开始介绍前端方面的数据结构,刚把vue源码过完就开始数据结构,可见它的地位有多重要.有人说我一前端又不是后端学这个数据结构干嘛,好吧,只能说你还没有这个意识,一是面试很多大厂就会考察,我面试 ...

  4. 常用的十种算法:二分查找,分治,动态规划,KMP

    常用的十种算法 一.二分查找算法(非递归) 1.1 二分查找算法(非递归)介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行 ...

  5. 数据结构与算法--6.二分查找

    文章目录 一. 二分查找 二. 代码实现一:使用递归 三. 代码实现二:非递归 一. 二分查找 二. 代码实现一:使用递归 def binary_search(alist, item):"& ...

  6. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  7. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

  8. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  9. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  10. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

最新文章

  1. 看完就明白锁系列之自旋锁
  2. Android setOnPageChangeListener 过时了怎么办?
  3. Ext DeskTop的使用方法简易教程及相关例子Demo(转)
  4. 薅羊毛!1024程序员的狂欢!
  5. c linux 获取cpuid_Linux下C编程 -- 得到系统的CPU信息(cpuid)
  6. php清空html_PHP清除html格式的代码
  7. 三国也风流服务器怎么不稳定呢,三国也风流手游
  8. mysql-proxy中间件使用
  9. 面试题--------9、mysql的drop delete truncate 分别在什么场景下使用
  10. CentOS7中的firewall 和 iptables
  11. java如何通过拼音搜索功能_如何实现拼音搜索
  12. THULAC 词性表
  13. 新旭完成总金额达美金4,000万元C轮融资;波士顿科学两款创新产品同时进入创新医疗器械特别审查程序 | 医药健闻...
  14. Qt编写安防视频监控系统65-子模块9数据调试
  15. 三极管构成的电流负反馈放大器
  16. Android 获取局域网内网IP地址
  17. 交互题 XOR Guessing
  18. Java设计模式大全
  19. shell习题-27
  20. android oreo 老机型,Android Oreo 通知新特性,这坑老夫先踩了

热门文章

  1. 编程之美2013年大赛解题思路--初赛(A)
  2. 给科研背景出身公司创始人的九条干货建议
  3. 意图识别各种模型比较
  4. 这些阻碍程序员升职加薪的行为,你中招了几个?
  5. python gui编程for mac_Python IDE 开发软件-PyCharm pro for Mac
  6. 日本一网友买煤炭自杀
  7. “天宫一号”与“神舟八号”交会对接成功
  8. C语言 序列排序并去重
  9. ITSM平台和CMDB集成的主要场景
  10. 认识柯里化函数及其应用