目录

1 问题描述

2 解决方案

2.1 递归法

2.2 迭代法


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)的更多相关文章

  1. 算法笔记_018:旅行商问题(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法   1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...

  2. 折半查找——Java实现

    一.查找思想 折半查找 也称为二分查找,是一种效率较高的查找方法,查找时要求表中的节点按关键字的大小排序,并且要求线性表顺序存储. 首先用要查找的关键字值(key)与中间位置结点的关键字值(arr[m ...

  3. 算法笔记_021:广度优先查找(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...

  4. 算法笔记_020:深度优先查找(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 深度优先查找(depth-first search,DFS)可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问.在每次迭代的时候, ...

  5. 算法笔记_019:背包问题(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 递归求解 2.2.2 非递归求解(运用异或运算) 2.3 动态规划法 1 问题描述 给定n个重量为w1,w2,w3,... ...

  6. 算法---区间K大数查找 Java 蓝桥杯ALGO-1

    import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(Strin ...

  7. 算法笔记_015:快速排序(Java)

    目录 1 问题描述 2 解决方案 2.1 快速排序原理简介 2.2 具体编码 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列. 2 解决方案 2.1 快速排序原理简介 引用自百度百科 ...

  8. 算法笔记_230:运动员分组(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...

  9. 算法笔记_136:交替字符串(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...

随机推荐

  1. HDU 6138 Fleet of the Eternal Throne(AC自动机)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6138 [题目大意] 给出一些串,询问第x个串和第y个串的公共子串, 同时要求该公共子串为某个串的前 ...

  2. BZOJ 2612 [Poi2003]Sums(最短路)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2612 [题目大意] 给定a数组,问num能否被表示为a[1]*x[1]+a[2]*x[ ...

  3. org.json.JSONObject and no properties discovered 错误解决

    自己在搭建SSM框架的时候(Spring + spring mvc + mybatis)报错内容如下: No serializer found for class org.json.JSONObjec ...

  4. bzoj 3595

    Splay 每个节点维护一个区间. /************************************************************** Problem: 3595 User ...

  5. String是最基本的数据类型吗?

    不是, 基本数据类型包括:byte,short,int,long,float,double,boolean,char. 而String是类代表字符串,属于引用类型,所谓引用类型包括:类,接口,数组.. ...

  6. 中国剩余定理 hdu 3579

    HDU 3579 Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. Codeforces Beta Round #10 C. Digital Root 数学

    C. Digital Root 题目连接: http://www.codeforces.com/contest/10/problem/C Description Not long ago Billy ...

  8. Codeforces Round #346 (Div. 2) C. Tanya and Toys 贪心

    C. Tanya and Toys 题目连接: http://www.codeforces.com/contest/659/problem/C Description In Berland recen ...

  9. 移动应用安全开发指南(Android)--数据验证

    概述 移动应用往往通过数据的发送.接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络.内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执 ...

  10. HDU 4585 Shaolin(水题,STL)

    Shaolin Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...