Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)
一、概念
二分查找算法也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。
二、算法思想
搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
三、优缺点
二分查找算法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,二分查找算法适用于不经常变动而查找频繁的有序列表。
四、复杂度分析
(1) 时间复杂度
二分查找每次把搜索区域减少一半,时间复杂度为O(log(n));
(2)空间复杂度
O(1)
package lsg.ap.binarysearch; import java.util.Arrays; public class BinarySearch { /** * 功能:二分法查找的一般实现方法 *@author: 梁山广 * 2016年4月11日下午6:32:30 * @param array * @param target * @return */ public static int binarySearch(int[] array,int target) { int bottem=1; int top=array.length; while(bottem<=top) { int middle=(bottem+top)/2; if(target>array[middle]) { bottem=middle+1; } else if(target<array[middle]) { top=middle-1; } else { return middle;//找到指定元素后返回其下标 } } return -1;//找不到就返回-1 } /** * 功能:递归法实现二分查找 *@author: 梁山广 * 2016年4月11日下午6:34:58 * @param array * @param targrt */ public static int BinarySearchRecursive(int[] array,int bottem,int top,int target) { while(bottem<=top)//防止溢出 { int middle=(bottem+top)/2; if(target>array[middle]) { return BinarySearchRecursive(array,middle+1,top,target); } else if(target<array[middle]) { return BinarySearchRecursive(array,bottem,middle,target); } else { return middle; } } return -1; } /** * 递归二分法查找到的最终封装 */ public static int binarySearchRecursive(int[] array,int target) { int index=BinarySearchRecursive(array,1,array.length,target); return index; } /** * * 输出相应数组的结果 * @param array */ private static void printArray(int[] array) { for(int value:array) System.out.print(" "+value+" "); System.out.println(); } public static void main(String[] args) { int[] array=new int[]{8,3,2,1,7,4,6,5}; System.out.println("原始数组为:"); printArray(array); Arrays.sort(array); System.out.println("排序之后数组为:"); printArray(array); System.out.println("待查找元素的下标为:"); System.out.println(binarySearchRecursive(array,5)); } }
Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)的更多相关文章
- java基础之二分法查找
package p1; import java.util.*; public class Sortdob { public static void BubbleSort(int[] arr) { ...
- java基础50道编程题
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...
- JAVA基础50题
package package0530; import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;imp ...
- Java冒泡排序与二分法查找的代码随笔
package javafirst; import java.util.Arrays; class MaoPao{ //升序排列 /** * @param arr 要排序的数组 * @return i ...
- Java中数组二分法查找
算法:当数组的数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的,如果是无序的也可通过选择排序.冒泡排序等数组排序方法进行排序之后,就可以使用二分法查找. 基本思想:假设数据是按升序排序 ...
- java数组之二分法查找
认识: 猜字游戏 步数 所猜的数 结果 可能值的范围 0 1~100 1 50 太高 1~49 2 25 太低 26~49 3 37 太高 26~36 4 31 太低 32~36 5 34 太 ...
- java基础---数组的查找算法(2)
一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...
- java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * ...
- Java基础知识强化之IO流笔记15:递归之删除带内容的目录案例
1. 需求:递归删除带内容的目录 分析: (1)封装目录 (2)获取该目录下的所有文件或者文件夹的File数组 (3)遍历该File数组,得到每一个File对象 (4)判断该File对 ...
随机推荐
- Asp.net forms认证注意事项
1.N台服务器配置文件的相关配置要一致 <authentication mode="Forms"> <forms timeout="3600" ...
- 数据库里any 和 all 的区别
any 是任意一个all 是所有 比如select * from student where 班级='01' and age > all (select age from student whe ...
- Android项目框架升级尝鲜OkHttp
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 随着项目日趋稳定,需求不再总是变化,那么是时间来整理下项目了.先简单介绍下,本项目最初使用loop4 ...
- Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...
- 如何由新特性跳转到App首页
前一段时间,一个哥们问我怎么跳转. 1.首先,要获取到当前的window,因为是在window层面上显示,所以,在window层面上进行push. 2.参照上面一条. // 显示状态栏 UIAppli ...
- JS-005-常见下拉列表 Select 和 datalist
下拉列表在我们日常的网页浏览的过程中,随处可见,是 web 编程过程中大家非常熟悉的一个页面元素,随着 HTML 语言的日益强大,其在广大攻城狮的手中可谓是千变万化,有了很多不同的实现方式.本文主要以 ...
- Android SDK无法更新问题解决 ---- 还可解决无法上google的问题
Android SDK无法更新问题解决 2012-10-14 10:13:01| 分类: Android|举报|字号 订阅 1.在SDK Manager下Tools->Options打 ...
- win2008主机IIS7.x 关于web.config设置301重定向
win2008主机IIS7.x 关于web.config设置301重定向 要求:windows主机是IIS7.0或以上的版本 方法如下: 在网站的根目录下新建web.config文件并将一下代码加入到 ...
- No mapping found for HTTP request with URI [] in DispatcherServlet with name 'appServlet'
项目是使用SpringMVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [] in DispatcherServlet ...
- css3画图之大白(●—●)
把大白送给你~ <!DOCTYPE html> <html> <head> <title>大白</title> <meta http- ...