算法006:二分查找 递归、非递归
题目:
已知一个有序数组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:二分查找 递归、非递归相关推荐
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- 二分查找原理非递归与递归实现【转载】
二分查找 实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引). 解题步骤: 定义3个用来记录索引值的变量,变量min记录当前范围最小索引值,初始值为0:变量max记录当前范围最大 ...
- vue 怎么样不重复往数组里插入数据_前端数据结构与算法(1) -二分查找vs二叉树...
今天给大家开始介绍前端方面的数据结构,刚把vue源码过完就开始数据结构,可见它的地位有多重要.有人说我一前端又不是后端学这个数据结构干嘛,好吧,只能说你还没有这个意识,一是面试很多大厂就会考察,我面试 ...
- 常用的十种算法:二分查找,分治,动态规划,KMP
常用的十种算法 一.二分查找算法(非递归) 1.1 二分查找算法(非递归)介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行 ...
- 数据结构与算法--6.二分查找
文章目录 一. 二分查找 二. 代码实现一:使用递归 三. 代码实现二:非递归 一. 二分查找 二. 代码实现一:使用递归 def binary_search(alist, item):"& ...
- c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...
- 数据结构与算法:二分查找
二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- 查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...
最新文章
- 看完就明白锁系列之自旋锁
- Android setOnPageChangeListener 过时了怎么办?
- Ext DeskTop的使用方法简易教程及相关例子Demo(转)
- 薅羊毛!1024程序员的狂欢!
- c linux 获取cpuid_Linux下C编程 -- 得到系统的CPU信息(cpuid)
- php清空html_PHP清除html格式的代码
- 三国也风流服务器怎么不稳定呢,三国也风流手游
- mysql-proxy中间件使用
- 面试题--------9、mysql的drop delete truncate 分别在什么场景下使用
- CentOS7中的firewall 和 iptables
- java如何通过拼音搜索功能_如何实现拼音搜索
- THULAC 词性表
- 新旭完成总金额达美金4,000万元C轮融资;波士顿科学两款创新产品同时进入创新医疗器械特别审查程序 | 医药健闻...
- Qt编写安防视频监控系统65-子模块9数据调试
- 三极管构成的电流负反馈放大器
- Android 获取局域网内网IP地址
- 交互题 XOR Guessing
- Java设计模式大全
- shell习题-27
- android oreo 老机型,Android Oreo 通知新特性,这坑老夫先踩了