其实二分查找算法就和我们在一个英文字典中找一个单词一样,比如要找middle这个单词,先把字典翻到大概中间的位置,那么现在字典就被分成两个部分了,middle这个单词要么在第一个部分,要么在第二个部分,如果正好翻到p那一页,那么说明middle在前面的那个部分,再从前面那个部分找一个大概中间的位置,用不了多长时间就找到middle了。 我们查字典的这个方法就是二分查找算法,但是前提是字典是排好序的,如果字典是乱序的,那么就没法用 二分查找算法了。

仔细想来,插入算法也可以用类似二分查找算法的思路来操作,一般插入算法的前提肯定是已经排好序了,用二分插入算法效率很高。

从二分查找算法实现来看,它实际上是在降低候选数据规模的一种思路。

如果用最简单的一个一个查找,那么n个数据第一次查找的时候候选数据规模是n,第二次查找的时候候选数据规模是n-1。。。

每次数据规模减1.

如果二分查找的话,那么n个数据第一次 查找的时候候选数据规模是n,第二次查找的时候候选数据规模是n/2,第三次查找的时候数据规模是n/4。

可以看到二分查找算法降低数据规模的作用十分明显。

哈希算法也是一种查找算法,它的意思是先给候选数据建立索引,然后按照索引和候选数据一一对应的关系存起来,查找的时候是先把待查找数据用哈希函数算出索引值,然后就找到了候选数据了。处理问题的思路其实是一种把无序数据变得“有序”,

这个有序就是建立索引的过程,是一种预处理的思路,你让我查找数据,我先不找,先把数据摆弄摆弄,摆弄好了再找。我并不是很赞同书上说的哈希算法是一种空间换时间的算法,感觉没有说道点子上啊。

转载于:https://www.cnblogs.com/yfish/p/9946474.html

二分查找算法为什么要先排序相关推荐

  1. 二分查找算法的两种实现方式:非递归实现和递归实现

    二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序. 先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid ...

  2. LeetCode面试刷题技巧-二分查找算法代码思路解析

    二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...

  3. Python 二分查找算法

    如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76 ...

  4. java的数组查找算法_java数组、排序算法、查找算法详解

    1.为什么定义数组要采用type[] arrayName;这种方式? 因为这种方式具有很好的可读性,使用这种方式很容易就可以理解这是定义一个变量,其中变量名是arrayName,变量的类型是type[ ...

  5. 二分查找算法及其变种

    前言 二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法.其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功:若给定的值小于中间记录的 ...

  6. 顺序查找与二分查找算法

    顺序查找算法 顺序查找是非常简单常用的查找算法,基本思路:从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1.该算 ...

  7. 递归与分治——二分查找算法(折半查找算法)

    二分搜索主要解决的问题是确定排序后的数组中是否包含目标元素val. 二分搜索通过持续跟踪数组中包含元素val的范围.分为两个过程,第一就是找到了,第二个就是没找到: 一开始,这个范围是整个数组,然后通 ...

  8. Python二分查找算法

    二分查找算法 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,6 ...

  9. list 查找_五千字长文带你学习 二分查找算法

    点击上方"与你一起学算法",选择"星标"公众号 重磅干货,第一时间送达 二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使 ...

最新文章

  1. sql server ssl安全错误_Nginx的这些安全设置,你都知道吗?
  2. 虚拟机架云服务器,云服务器 虚拟机架设
  3. 【AD用户配置系列三】文件夹重定向为用户登录与注销加速
  4. 【HDU - 1102】Constructing Roads (最小生成树裸题模板)
  5. python大一基础题_python基础练习题
  6. Android基础控件之Button的基本使用
  7. php进程名,DOS根据进程名或PID删除进程命令
  8. android 源码开发 关于编译等小知识点总结
  9. Oracle常用操作【自己的练习】
  10. linux命令行添加管理员用户,Linux基础命令---添加用户useradd
  11. js正则表达式校验手机号码和电话号码
  12. IDEA中下载mybatis插件mybatis plugins 离线版安装
  13. nginx反向代理进行统一鉴权
  14. 数字电视机顶盒ATSC制式详细介绍
  15. linux服务器使用WonderShaper进行带宽限制
  16. ipad可以安装python的编辑器_ipad配置python步骤
  17. STM32控制TFTLCD显示屏(理论)
  18. At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger
  19. windows快捷键失效 - 重启无效 - 插拔键盘解决
  20. HDU 4125 Moles 笛卡尔树 + kmp

热门文章

  1. 多款eclipse黑色坏境任你选择,只要导入配置
  2. MVC %%与%=%与区别
  3. 各种主流数据库的比较
  4. CTFshow 命令执行 web124
  5. 延长EEPROM使用寿命的程序优化方法
  6. 【upc5020】 Knight
  7. Tarjan 算法详解
  8. 吴教主深度学习和神经网络课程总纲
  9. 张苗 清华大学 计算机,2011222229张苗组件局域网及搭建服务器技术分析.doc
  10. java exec 空格_java exec 空格及特殊符号处理的解决方案