Java实现二分查找(折半查找)
1 问题描述
首先,了解一下何为折半查找?此处,借用《算法设计与分析基础》第三版上一段文字介绍:

2 解决方案
2.1 递归法
package com.liuzhen.chapter4;
public class BinarySearch {
//方法1:递归求解
public void recursionSearch(int[] A,int start,int end,int number){
int mid = (start + end)/2;
if(A[mid] == number)
System.out.println("使用递归法求取number = "+number+"的数组下标结果:"+mid);
if(A[mid] > number)
recursionSearch(A,start,mid-1,number); //递归调用
if(A[mid] < number)
recursionSearch(A,mid+1,end,number); //递归调用
}
public static void main(String[] args){
BinarySearch test = new BinarySearch();
int[] A = {3,14,27,31,39,42,55,70,74,81,85,93,98};
test.recursionSearch(A, 0, A.length-1, 70);
}
}
运行结果:
使用递归法求取number = 70的数组下标结果:7
2.2 迭代法
package com.liuzhen.chapter4;
public class BinarySearch {
//方法2:迭代求解
public int iterationSearch(int[] A,int number){
int start = 0;
int end = A.length-1;
while(start <= end){
int mid = (start + end)/2;
if(A[mid] == number)
return mid;
if(A[mid] > number)
end = mid-1;
if(A[mid] < number)
start = mid+1;
}
return -1;
}
public static void main(String[] args){
BinarySearch test = new BinarySearch();
int[] A = {3,14,27,31,39,42,55,70,74,81,85,93,98};
System.out.println("使用迭代法求解number = 70的数组下标结果:"+test.iterationSearch(A, 70));
}
}
运行结果:
使用迭代法求解number = 70的数组下标结果:7
Java实现二分查找(折半查找)的更多相关文章
- java基础-数组的折半查找原理
java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...
- C语言查找算法之顺序查找、二分查找(折半查找)
C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...
- python3--算法基础:二分查找/折半查找
算法基础:二分查找/折半查找 #!/usr/bin/env python # -*- coding:utf-8 -*- # 算法基础:二分查找/折半查找 def binarySearch(dataSo ...
- Java实现冒泡排序、折半查找
1.冒泡排序 public class BubbleSort{ public static void main(String[] args){ int score[] = {67, 69, 75, 8 ...
- swift版 二分查找 (折半查找)
二分查找作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围之内,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找.废话少说,直接上代码,可复制粘贴直接出结果! import ...
- 顺序查找 && 折半查找
顺序查找 算法描述 顺序比较即可. 平均查找长度 (n+1)/2, 其中n为表长 ...
- 算法学习记录-查找——折半查找(Binary Search)
以前有个游戏,一方写一个数字,另一方猜这个数字.比如0-100内一个数字,看谁猜中用的次数少. 这个里面用折半思想猜会大大减少次数. 步骤:(加入数字为9) 1.因为数字的范围是0-100,所以第一次 ...
- Java经典算法之折半查找(二分法)
采用二分法时,数据应是有序并且不重复的 与小时候玩的猜数游戏是一样的,会让你猜一个他所想的1~100之间的数,当你猜了一个数后,他会告诉你三种选择中的一个,比他想的大,或小,或猜中了,为了能用最少的次 ...
- 【Java】 大话数据结构(10) 查找算法(1)(顺序、二分、插值、斐波那契查找)
本文根据<大话数据结构>一书,实现了Java版的顺序查找.折半查找.插值查找.斐波那契查找. 注:为与书一致,记录均从下标为1开始. 顺序表查找 顺序查找 顺序查找(Sequential ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
随机推荐
- 详解 Spark 中的 Bucketing
什么是 Bucketing Bucketing 就是利用 buckets(按列进行分桶)来决定数据分区(partition)的一种优化技术,它可以帮助在计算中避免数据交换(avoid data shu ...
- 【Effective Java】第二章-创建和销毁对象——1.考虑用静态工厂方法代替构造器
静态工厂方法的优点: 可以赋予一个具有明确含义的名称 可以复用唯一实例,不必每次新建 可以返回原实例类型的子类对象 可以在返回泛型实例时更加简洁 缺点: 类如果不含有共有的或者受保护的构造器,就不能被 ...
- Lr运行错误Error: Socket descriptor not found. Hint: the problem might be
在controller中,运行时,报如下错误“Error: Socket descriptor not found. Hint: the problem might be solved applyi ...
- 程序员的踩坑经验总结(一):如何把Bug的偶现变必现
程序员的踩过的坑也是可以分类的,很常见又很难解决的一类是偶然的现象,表现起来比较怪异. 而把一个问题Bug的偶现变成必现,是开发人员的一种能力.我认为也应该是测试人员的一种能力,但是各个公司要求不一样 ...
- bcdedit 替代easybcd 编辑grub
bcdedit这个命令是win7下,继续安装xubuntu时遇到的.当时xubuntu的语言设置为en-us,时区改为HK,可是仍有很多不太适应的地方.于是,删了xubuntu,重装它.同时,grub ...
- package.json中^,~的区别
https://blog.csdn.net/peaceoncemore/article/details/79195206 "devDependencies": { " ...
- mysql日志体系大盘点
MySql日志文件主要包含:错误日志.慢查询日志.事务日志.二进制日志等 Mysql的日志配置可以通过命令 show global variables like '%log%'; 执行的结果如下 &q ...
- mouseover与mouseenter区别
学习笔记. mouseover:在鼠标移入元素本身或者子元素时都会触发事件,相当于有一个冒泡过程.而且在鼠标移入子元素中时,父元素会显示离开的状态:相应的,当鼠标从子元素移入父元素,子元素也会显示离开 ...
- Spring 框架的 AOP 简介
Spring 框架的 AOP Spring 框架的一个关键组件是面向方面的编程(AOP)(也称为面向切面编程)框架. 面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点. 跨一个应用程序的多 ...
- 【python爬虫】scrapy入门7:Scrapy中runspider和crawl的区别
runspider:不依赖创建项目 命令:scrapy runspider myspider.py 等同于 pyhton myspider.py crawl:使用spider进行爬取,依赖项目创建 ...