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表示这 ...
随机推荐
- 学JAVA第十五天,方法重载及构造方法进一步了解
由于星期五生病了,所以就没写.今天上课,又来写了!!! 先来说方法的重载. 方法的重载就是有两个方法的方法名相同,但参数不一致,参数个数不一致,或参数的类型不一样. package pkg9;publ ...
- wkhtmltox实现网页转换成图片或pdf
1.先下载http://download.gna.org/wkhtmltopdf/obsolete/windows/wkhtmltox-0.11.0_rc1-installer.exe,安装 2.在命 ...
- wordpress常用函数及使用位置
single 页面: 摘要内容:the_excerpt():如果摘要空,摘取正文内容:需要在循环中使用 获取当下页面的分类:wp_get_post_terms( int $post_id, strin ...
- POST一下就知道:人生苦短,我用Python!
Python编程笔记---- 背景: “闸机端”简版程序要求: 读取扫描仪得到的userID; 向服务器发送请求进行验证: 根据返回值(True/False)决定闸机的信号. 1. 文件的读取 网上买 ...
- jqery autocomplete 动态传递参数的问题
今天弄一个autocomplete 向后后台动态传递参数的问题 老的写法: params: { "saleid": $("#divSalesman input[field ...
- Python encode和decode
今天在写一个StringIO.write(int)示例时思维那么一发散就拐到了字符集的问题上,顺手搜索一发,除了极少数以外,绝大多数中文博客都解释的惨不忍睹,再鉴于被此问题在oracle的字符集体系中 ...
- JQuery 图片轮播,详细注释说明,让你一看就会!
准备工作: 1.准备几张大小相同的图片 完成功能: 1.自动轮播 2.手动轮播 3.点击二侧按钮前后切换图片 JQuery插件地址: 链接:https://pan.baidu.com/s/1zNl2- ...
- ztree 为节点添加点击触发事件
<SCRIPT type="text/javascript"> var setting = { data : { key : { title : "code& ...
- python小白——进阶之路——day2天-———数据类型和Number类型和str字符串
### -python的六大标准数据类型(1)Number 数字类型(int float bool complex)(2)String 字符串类型(3)List 列表类型(4)Tuple 元组类型(5 ...
- Activiti开发案例之activiti-app工作流导出图片
前言 自从 Activiti 和 JBPM4 分家以后,Activiti 目前已经发展到了版本7,本着稳定性原则我们最终选择了6,之前还有一个版本5. 问题 在开发使用的过程中发现 Activiti ...