Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找

    【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51106238
     目前查找方法主要:顺序查找、有序查找(分为:折半查找即二分查找、差值查找和斐波那契查找方法)、线性索引查找、二叉排序树、平衡二叉树(AVL树)以及多路查找树(B树)、散列表查找(哈希表)等查找方法
     【1】顺序查找:是最简单的查找方法,其时间复杂度为O(n),是通过构造一个线性表,采用遍历的方法,将记录与关键字一个一个的对比,若相等则查找成功,若全都不相等,则查找失败即记录不存在;
     【2】有序查找:顺序表的记录一般是无序,而有序表的记录是有序的;使用有序表查找方法时,前提条件是待查找的记录必须是已经排好序的。 有序查找分为:折半查找即二分查找、差值查找和斐波那契查找方法
      (1)折半查找法:又称二分查找,是最经典的有序表查找,它的前提是线性表中的记录必须是有序的(通常从小到大排列),线性表采用顺序存储的方式;其基本思路是:将关键字key与中间记录((low+high)/2)进行比较;若相等,则查找成功;若关键字小于中间记录,则说明关键字可能在下半区;若大于,则说明关键字可能在上半区;不断重复上述过程,直到查找成功或失败;
       Java代码如下:
package javatest1;
public class JavaTest1 {public static void main(String[] args) {int[] num = { 1, 2, 3, 4, 5, 6 };//必须有序int index = Binary_Search(num, 5);System.out.print(index);}/* num:有序表(由小到大排列)* key:要查找的关键字* return:还回查找到关键字的下标,没有找到则还回-1*/private static int Binary_Search(int[] num, int key) {int low, high, mid;low = 0;high = num.length - 1;while (low <= high) {mid = (low + high) / 2;if (key < num[mid])high = mid - 1;else if (key > num[mid])low = mid + 1;else// 如果等于则直接还回下标值return mid;}return -1;}
}

      (2)插值查找:对二分法查找进行改进,将要查找的关键字key与查找表中的最大最小值记录进行比较后,再确定查找的范围。在二分法查找中,是以中间记录作为查找分区的,即将表一分为二,分为上下两个查找分区:
      而插值查找采用插值公式的方法,来确定查找分区。可简单这样理解,比如有100个数其值在0~1000范围之间从小到大排序,你要查找关键字为5的位置下标,若采用二分法,则大概在500的地方往下查找,但采用插值的方法,可以通过插值计算出5这个关键字应该在靠近0的地方,因此查找时从50往下开始查找,从而提高效率:
      因此插值查找只需要在折半查找算法的代码中简单修改一下即可:
package javatest1;
public class JavaTest1 {public static void main(String[] args) {int[] num = { 1, 2, 3, 4, 5, 6 };// 必须有序int index = Insert_Search(num, 5);System.out.print(index);}/** num:有序表(由小到大排列) key:要查找的关键字 return:还回查找到关键字的下标,没有找到则还回-1*/private static int Insert_Search(int[] num, int key) {int low, high, mid;low = 0;high = num.length - 1;while (low <= high) {// mid = (low + high) / 2;//二分查找mid = low + (high - low) * (key - num[low])/ (num[high] - num[low]); // 插值查找if (key < num[mid])high = mid - 1;else if (key > num[mid])low = mid + 1;else// 如果等于则直接还回下标值return mid;}return -1;}
}

Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找相关推荐

  1. 对长度为200的有序表进行二分查找_程序员常用的查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  2. java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  3. 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找

    第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...

  4. JAVA数据结构与算法之斐波那契查找(黄金分割点)

    前言 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现. 温馨提示:这篇博客可能不适合刚学数据结构的新手. 算法的简单介绍 黄金分割点是指把一条线段分割为 ...

  5. 斐波那契查找(黄金分割法)超详细详解

    斐波那契查找思路 说句实在话,这个斐波那契查找我看了不下5遍才理解他的思路和代码,因为它里面的值太多,不好理解容易绕晕,所以我给大家用自己的理解讲一下 什么是斐波那契 要想学会斐波那契查找,首先你得知 ...

  6. 007.斐波拉契查找算法

    1. 斐波拉契查找算法 斐波拉契查找算法也称为黄金分割查找算法,它是在折半查找算法的基础上根据斐波拉契数列进行分割.折半法是取排序好的中间值进行分割,而斐波拉契查找算法是根据黄金分割点进行分割. 黄金 ...

  7. 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现

    目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...

  8. Java数据结构之二分查找/插值查找/斐波那契查找

    目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...

  9. 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)

    转载 BinarySearch.java /*** @ClassName BinarySearch* @Description 折半查找** 可以使用插值公式将折半查找性能优化** 只需将其中的 mi ...

最新文章

  1. hdu 1213 How Many Tables ([kuangbin带你飞]专题五 并查集)
  2. 银河麒麟4安装MySQL8_2020-03-24 linux 安装mysql8.0
  3. 选择一线一张床还是小城一套房?
  4. 什么相片可以两张弄成一张_手机修图教程 | 如何不着痕迹地给相片添加优雅手写字体?...
  5. 常见的几种最优化方法
  6. oracle adg 改密码,Oracle ADG数据库切换
  7. NotificationManager: notifyAsUser: tag=null, id=6, user=UserHandle{0}
  8. STM32的IAP在线升级的源码中的地址解读
  9. 基于tkinter的九型人格测试系统介绍
  10. 弘辽科技:你吃的粽子,撑起百亿市场
  11. 【Excel 教程系列第 15 篇】Excel 中的简单排序(升序 / 降序)、多条件排序、按颜色排序、自定义排序、以及巧用“升序“制作工资条
  12. python代码变成so
  13. python爬虫之获取谷歌浏览器所有cookie
  14. html meta标签‘http-equiv’属性的详解用法
  15. 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]
  16. 筛选状态下进行复制粘贴为数值
  17. java读取本地图片_java 怎么才能读取本地磁盘中的图片并传给前端(URL)
  18. 微软研究院洪小文:人工智能到底是个什么东西?我们应该怎样看待它?
  19. Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
  20. HTML5期末大作业:静态购物网站设计——静态购物网站模板11页(前台+后台) HTML+CSS+JS

热门文章

  1. 垂直居中重要方法理解---重点是方法三
  2. javase中的super、this和protected关键字
  3. 《Ext JS高级程序设计》节选: 一个结合DataWrite和RowEditor的Grid示例(2)
  4. vue.js 三种方式安装--npm安装
  5. (4)pyspark---dataframe清理
  6. centos6系列版本防火墙图形化设置
  7. 程序员也要寻找贸易的机会,要参加研讨会
  8. Windows Phone(三)WP7版 记账本 开发(使用SQLite数据库)
  9. Java,想说爱你真不容易
  10. 时间、时间戳相关小结 - iOS