二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中,

首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功;

否则,若key小,则在字典前半部分中继续进行二分法检索;

若key大,则在字典后半部分中继续进行二分法检索。

这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。

偶数个取中间2个其中任何一个作为中间元素

二分法检索是一种效率较高的检索方法,要求字典在顺序表中按关键码排序。

java 代码

成功返回所在位置,失败返回负数package ForTest;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Arithmetic{

public static > int BinarySearch(List array, int start, int end, T key)

{

int low;

int high;

int guess;

if(array == null || start>end || start > array.size()-1 || end < 0)

{

return -1;

}

start = start < 0 ? 0 : start;

low = start-1;

end = end > array.size()-1 ? array.size()-1 : end;

high = end+1;

while (high - low > 1) {

guess = ((high - low)>>1) + low;

if (array.get(guess).compareTo(key) < 0)

low = guess;

else

high = guess;

}

if (high == end +1 )

{

return ~(end +1 );

}

else if (array.get(high).compareTo(key) == 0)

{

return high;

}

else

{

return ~high;

}

}

public static > int BinarySearch(T[] array, int start, int end, T key)

{

List stooges = Arrays.asList(array);

return Arithmetic.BinarySearch(stooges, start, end, key);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList a = new ArrayList();

Float[] b = new Float[100];

for(int i=0; i<100; i++)

{

a.add(i);

b[i] = (float) i;

}

System.out.println(""+Arithmetic.BinarySearch(a,0,1000,200));

System.out.println(""+Arithmetic.BinarySearch(b,0,100,2.f));

}

}

更多算法之二分法查找相关文章请关注PHP中文网!

相关标签:二分法查找

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql实现二分法查找_算法之二分法查找相关推荐

  1. ultraedit查找每行第二个单词_算法4th3:查找

    第三章:查找 查找是很重要的功能,帮助我们高效检索访问海量信息.这一方面有很多经典的查找算法. 符号表是一张抽象的表,是存储数据的容器.这张表各种存储的信息称为「值」,按照指定的「键」可以去获取到「值 ...

  2. python信息找人的算法_算法篇-python查找算法

    上一篇的递归算法中,了解到算法的复杂度.递归就是在函数中调用本身. 在汉诺塔游戏例子中,如果你需要移动的盘子很多时,程序运行就会消耗很长时间来计算结果.可以回顾下 ->算法篇-python递归算 ...

  3. mysql 家谱树查询_无限级分类之查找子孙树和家谱树

    $area=array( array('id'=>'1','name'=>'河南','parent'=>0), array('id'=>'2','name'=>'吉林', ...

  4. mysql最小费用最大流问题_算法笔记_140:最小费用最大流问题(Java)

    packagecom.liuzhen.practice;importjava.util.ArrayList;importjava.util.Scanner;public classMain {publ ...

  5. b树范围查找_使用段树查找最大查询范围

    b树范围查找 The following question/problem is asked on http://www.spoj.com/problems/GSS1/ 在http://www.spo ...

  6. python特征匹配 查找_特征匹配+单纯形查找对象

    我尝试使用opencv获取一个查询图像并在一个基本图像中进行匹配.我看了一下在线教程,你看,他们有示例代码来做这件事.所以我复制并粘贴了代码,并尝试用一些试用图像来运行它.下面是代码和一组图像示例.在 ...

  7. mysql索引图文操作_图文并茂,说说MySQL索引

    序 开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象- 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面 ...

  8. 实验题7.1 实现二分查找的算法

    [实验目的] (1)掌握查找的概念: (2)熟练掌握二分查找的原理及实现方法. [实验准备] (1)阅读教材中二分查找的相关内容: (2)熟悉二分查找的算法. [实验要求] (1)采用函数调用的方式完 ...

  9. c语言二分法查找一个数_算法竞赛小专题系列(1):二分法、三分法

    本系列是这本算法教材的扩展资料:<算法竞赛入门到进阶>. 罗勇军.郭卫斌. 清华大学出版社 二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 1. ...

最新文章

  1. 直线职权::参谋职权::职能职权
  2. boost::geometry::strategy::simplify::douglas_peucker用法的测试程序
  3. web安全_皮卡丘_xss
  4. Flex4/Flash多文件上传(带进度条)实例分享
  5. css3--文字效果
  6. 解决《Mobile绘制背景图片》中的问题
  7. python3抓取图片_通过Python3 爬虫抓取漫画图片
  8. [html] 你喜欢哪种布局风格?说说你的理由
  9. 关于增强(五)-Class Enhancement
  10. 每日站立会议 12.06
  11. drool 7.x 属性 : lock-on-active
  12. [转]2020年2月份Github上最热门的开源项目,速来围观
  13. python语言能做什么-Python是什么_python能做什么
  14. 学了N年英语,你学会翻译了吗?——最基本的数据库连接
  15. 【Hoxton.SR1版本】Spring Cloud Gateway之GlobalFilter全局过滤器
  16. 百度任玉刚写的对学习Android的理解
  17. duilib设置透明窗口_使用duilib开发半透明异形窗体程序(补充)
  18. MAC | svn: E175002: DAV request failed: 411 Content length required.
  19. 网站建设:颜色与线条的选择
  20. 2021年中国夜间经济行业发展规模及发展趋势分析[图]

热门文章

  1. 美国散户从90降到6他们是如何被消灭的
  2. Rust 高级编程 变性的直观解释
  3. jQuery几个经典表单应用整理回顾
  4. 专辑《原创音乐王》歌曲贾博涵《上辈子欠你的》
  5. 【CodeForces 1257C --- Dominated Subarray】
  6. HTML <colgroup> 标签
  7. java猴子摘桃子_小猴子摘桃子问题 -- JAVA 算法学习
  8. windows不能访问共享文件夹的终极解决办法
  9. Arduino UNO板结构说明
  10. 模仿el-popover实现自己的vue组件