一 概述
二分查找是一种查询效率非常高的查找算法 又称折半查找
二 条件
查找内容需满足:
1.为顺序结构
2 必须按关键字大小有序排列
优点是比较次数少,查找速度快,平均性能好;

其缺点是要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表
二 代码实现
2.1 递归实现
public class TestMId {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arrays= {72,24,53,575,866,2,64};
Arrays.sort(arrays);
System.out.println(Arrays.toString(arrays));
binarySearch(arrays, 0, 0, 0);
}
private static int binarySearch(int []arr,int key,int low,int high) {
// TODO Auto-generated method stub
if(key<arr[low] ||key >arr[high] ||low >high) {
return -1;
}
int mid=(low+high)/2;
if(arr[mid]>key) {
return binarySearch(arr,key,low,mid-1);
}else if(arr[mid]<key) {
return binarySearch(arr,key,mid+1,high);
}
return mid;
}
}

结果:
[2, 24, 53, 64, 72, 575, 866]
2.2 非递归实现
public class TestBinSearch {
public static void main(String[] args) {

int index[]= {324,64,86,97,2,1,24,54};
Arrays.sort(index);
System.out.println(Arrays.toString(index));
binsearch(index, 0);

}

private static int binsearch(int index[],int key) {
// TODO Auto-generated method stub
int low=0;
int high=index.length-1;
int mid=0;

if(key<index[low] || key>index[high] ||low >high) {return -1;
}
while(low<=high) {mid=(low+high)/2;if(index[mid]>key) {high=mid-1;}else if(index[mid]<key) {low=mid+1;}else {return mid;

}
}
return -1;
}
}
[1, 2, 24, 54, 64, 86, 97, 324]

二分查找-递归和非递归相关推荐

  1. JAVA常用算法一:二分查找【递归 or 非递归】

    文章目录 一.Java实现二分查找[递归] 二.Java实现二分查找[非递归] 三.测试 一.Java实现二分查找[递归] //递归使用二分查找public static int binarySear ...

  2. 算法006:二分查找 递归、非递归

    题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...

  3. (C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归

    1 /*2 * FILE: BinarySearch.C3 * DATE: 201803064 * ==============5 * DESCRIPTION: 折半查找_递归.非递归实现6 * 二分 ...

  4. 递归折半查找法 c语言程序,折半查找法的递归和非递归形式

    /* 1.折半查找的查找过程是:先确定待查记录所在区间,然后逐步缩小范围至到找到或者找不到该记录为止. 2.折半查找的性能分析可以由判定树得出,折半查找在查找成功时给定值进行比较的关键字个数至多为⌊l ...

  5. C#实现(递归和非递归)快速排序和简单排序

    C#实现(递归和非递归)快速排序和简单排序 本人因为最近工作用到了一些排序算法,就把几个简单的排序算法,想冒泡排序,选择排序,插入排序,奇偶排序和快速排序等整理了出来,代码用C#代码实现,并且通过了测 ...

  6. 二叉树创建及遍历算法(递归及非递归)(转)

    //二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二 ...

  7. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

  8. 树的递归与非递归遍历算法

    树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...

  9. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  10. (伪代码)树的前中后遍历和层次遍历算法实现(考研适用,递归和非递归)

    文章目录 前言 一.递归实现树的遍历 二.非递归实现 层次遍历 总结 前言 2022考研初试结束,总结了一些考研中基本常用算法.这篇主要是关于树的前中后遍历,递归实现和非递归实现两种,现在很多自命题在 ...

最新文章

  1. 第一个 Mybatis 程序(CURD操作)
  2. 最短路径-Dijkstra算法与Floyd算法
  3. Ionic介绍以及搭建环境、新建和运行项目
  4. java怎么打增量包_eclipse实现JavaWeb应用增量打包
  5. python免费网络采集_python网络数据采集7 采集一个网站所有的外链
  6. 湖南2021普通高考专业成绩查询,2021年湖南高考成绩查询时间 高考成绩查询入口...
  7. SAP License:BWBCS学习记录
  8. 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
  9. HPE服务器做raid5阵列
  10. ISO 7064:1983.MOD11-2校验码计算法(身份证18位效验码计算)
  11. react 脚手架配置代理
  12. 你画我猜游戏html源代码,微信小程序你画我猜demo完整源码
  13. Python数据加密与解密相关操作(hashlib、hmac、random、base64、pycrypto)
  14. ListView双击的行
  15. Photoshop cs8 颜色 查看调出 hsb模式滑块
  16. linux和windows认证sssd,linux – 使用sssd和Active Directory集成的麻烦
  17. 十年Java经验让我总结出了这些,什么是真正的架构设计?
  18. Python中except用法和作用
  19. Word中断开表格的办法
  20. 在window系统安装虚拟linux系统以及搭建web环境教程

热门文章

  1. UI设计理念——用简洁的道理说明一切
  2. 模型评估方法(AUC等)
  3. point-wise element-wise
  4. 一篇文章告诉你什么是量化的统计套利
  5. sub 、sup标签
  6. 365天挑战LeetCode1000题——Day 117 矩形区域不超过 K 的最大数值和
  7. 超详细的 MySQL 学习教程二(多实例、附练习、视频讲解持续更新)
  8. SDL已死,应用安全路在何方?
  9. python之魔术方法
  10. 搭建代理IP池的方法