算法笔记_026:折半查找(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
算法笔记_026:折半查找(Java)的更多相关文章
- 算法笔记_018:旅行商问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法 1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...
- 折半查找——Java实现
一.查找思想 折半查找 也称为二分查找,是一种效率较高的查找方法,查找时要求表中的节点按关键字的大小排序,并且要求线性表顺序存储. 首先用要查找的关键字值(key)与中间位置结点的关键字值(arr[m ...
- 算法笔记_021:广度优先查找(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...
- 算法笔记_020:深度优先查找(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 深度优先查找(depth-first search,DFS)可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问.在每次迭代的时候, ...
- 算法笔记_019:背包问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 递归求解 2.2.2 非递归求解(运用异或运算) 2.3 动态规划法 1 问题描述 给定n个重量为w1,w2,w3,... ...
- 算法---区间K大数查找 Java 蓝桥杯ALGO-1
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(Strin ...
- 算法笔记_015:快速排序(Java)
目录 1 问题描述 2 解决方案 2.1 快速排序原理简介 2.2 具体编码 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列. 2 解决方案 2.1 快速排序原理简介 引用自百度百科 ...
- 算法笔记_230:运动员分组(Java)
目录 1 问题描述 2 解决方案 1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...
- 算法笔记_136:交替字符串(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...
随机推荐
- [BZOJ3598][SCOI2014]方伯伯的商场之旅(数位DP,记忆化搜索)
3598: [Scoi2014]方伯伯的商场之旅 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 449 Solved: 254[Submit][Sta ...
- 谈HTTPS中间人攻击与证书校验(一)
一.前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是 ...
- 第1篇--基于jdk7和jdk8分析 JVM的内存区域
基于jdk7和jdk8分析 JVM的内存区域 目录前言1.什么是JVM2.JRE/JDK/JVM是什么关系3.JVM执行程序的过程4. JVM的生命周期5.JVM垃圾回收一.运行时数据区的组成1.程 ...
- HDU 5292 Pocket Cube 结论题
Pocket Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5292 Description Pocket Cube is the 2×2× ...
- codeforces 19D D. Points 树套树
D. Points Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/19/problem/D De ...
- codeforces 148E Aragorn's Story 背包DP
Aragorn's Story Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...
- 将mnist数据集存储到本地文件
参考文章: http://www.csuldw.com/2016/02/25/2016-02-25-machine-learning-MNIST-dataset/ import numpy as np ...
- js之iframe父、子页面通信
注意事项 一 . 页面加载顺序:一般先加载完父页面才会去加载子页面,所以:必须要确保在iframe加载完成后再进行操作,如果iframe还未加载完成就开始调用里面的方法或变量,会产生错误.判断ifra ...
- Generate stabilized PWM signals
A standard technique for generating analog voltages using µCs is to use a PWM output and filter the ...
- NativeXml: A native Delphi XML parser and writer
http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...