Java算法 -- 二分查找
折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
通过递归和非递归实现二分查找:
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
int position = biSearch(array, 5);
int position1 = biSearch(array, 1, array.length - 1, 5);
System.out.println(position);
System.out.println(position1);
}
/**
* 非递归实现二分查找
*
* @param array
* @param array
* @return
*/
public static int biSearch(int array[], int key) {
int low = 0;
//总长度
int high = array.length - 1;
while (low <= high) {
//中间位置
int mid = low + (high - low) / 2;
//如果中间位置的值大于要查找的内容,从左侧查找
if (array[mid] > key)
high = mid - 1;
else if (array[mid] < key)
//如果中间位置的值小于要查找的内容,从右侧查找
low = mid + 1;
else
//等于就返回
return mid;
}
return -1;
}
/**
* 递归实现二分查找
*
* @param array
* @param low 从哪个位置开始
* @param high 到哪个位置结束
* @param target 要查询的值
* @return
*/
public static int biSearch(int array[], int low, int high, int target) {
if (low > high) return -1;
//中间位置
int mid = low + (high - low) / 2;
//中间位置的值大于要查询的内容,从左侧递归查询
if (array[mid] > target)
return biSearch(array, low, mid - 1, target);
if (array[mid] < target)
//中间位置的值小于要查询的内容,从右侧递归查询
return biSearch(array, mid + 1, high, target);
return mid;
}
}
Java算法 -- 二分查找的更多相关文章
- Java实现二分查找算法
Java程序员总该玩点基本的算法. 1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中 ...
- Java之二分查找算法
算法说明:取中间位置的值与待查字比较.如果比待查字更大,则去列表的前半部分查找,如果比待查字小,则去列表的后半部分查找,直到找到这个待查字,或者返回没有找到这个待查字.其中给定的列表是从大到小排列的有 ...
- 经典算法二分查找循环实现Java版
二分查找 定义 二分查找(Binary Search)又称折半查找,它是一种效率较高的查找方法. 要求 (1)必须采用顺序存储结构 (2)必须按关键字大小有序排列 查找思路 首先将给定值K,与表中中间 ...
- java 实现二分查找算法
//二分查找算法的实现 public static int binarySearch(int[] arr,int search) { int low=0; int high=arr.length-1; ...
- java 实现二分查找法
/** * 二分查找又称折半查找,它是一种效率较高的查找方法. [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. * @author Administrator * */ p ...
- Java-数据结构与算法-二分查找法
1.二分查找法思路:不断缩小范围,直到low <= high 2.代码: package Test; import java.util.Arrays; public class BinarySe ...
- 南理第八届校赛同步赛-F sequence//贪心算法&二分查找优化
题目大意:求一个序列中不严格单调递增的子序列的最小数目(子序列之间没有交叉). 这题证明贪心法可行的时候,可以发现和求最长递减子序列的长度是同一个方法,只是思考的角度不同,具体证明并不是很清楚,这里就 ...
- 【15】-java实现二分查找
二分查找在面试中经常被遇到,这个方法十分优雅 介绍 二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它.一开始,范围覆盖整个数组 ...
- java 冒泡排序 二分查找 选择排序 插入排序
下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...
随机推荐
- dubbo-源码分析Provider
Dubbo provider启动原理: 当我们的dubbo启动我们的spring容器时spring 初始化容器的时候会查找META-INF/spring.handles文件查找对应的Namespace ...
- 关于时间的那些事--PHP、JavaScript、MySQL操作时间
PHP篇 PHP中时间操作单位是秒 一.将时间戳转为普通日期格式 //当前时间戳 time(); //当前时间格式 date("Y-m-d H:i:s",time()); //昨天 ...
- Web.xml中四种验证方式
源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...
- .NET Framework VS .NET Core
本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...
- SharePoint代码建表(实战)
分享人: 广州华软 无名 一. 前言 虽然SharePoint提供可视化界面建表,但是,不利于开发自动化部署.通常,如果通过手动建表,我们先在测试环境建表,然后存为模板,再上传到实际环境,最后根据模板 ...
- 对css盒模型的理解
介绍一下标准css的盒子模型?低版本IE的盒子模型有什么不同的? 1.有两种:IE盒子模型(怪异模式).W3c盒子模型(标准模式). 2.盒模型组成:内容(content).内边距(padding). ...
- SQL Server中将多行数据拼接为一行数据(一个字符串)
表A中id与表B中aid为一对多的关系 例如: 表A: id name a1 tom a2 lily a3 lucy 表B: id aid value b1 a1 B1 b2 a1 B2 b3 a2 ...
- crontab的笔试题随想
最近看到一道题目,具体如下: 下列哪个是创建一个每周三01:00~04:00每3分钟执行一次的crontab指令? A: 1,4 3 /bin/bash /home/sijiaomao/ok.sh B ...
- shell编程企业级实战(2)
Vim配置文件.vimrc vim配置文件 if 条件语句 if是最常见的条件判断语句 例1:如果不存在/backup目录就创建. [root@web-01 /server/tools]# vim 0 ...
- 【es6】数组排重
let set = new Set([1,2,3,4,4,4,4,4]); console.log( Array.from(set) ); //输出:[ 1, 2, 3, 4 ]