Hello,大家好,今天给大家继续讲解排序系列。可能有细心的"鸟友"会问,你不是讲解排序吗?怎么今天的主题是一个查找方法咧?

不错,因为考虑到在实际项目中,排序和查找经常是两个好基友,二者息息相关,相互依存。故为了大家更好的接手老板交给你的实际工作,而不至于被说成是"新兵蛋子",我觉得大家有必要和我来学学这个查找法。

言归正传,首先假定一个有序整数序列存储在数组list[MAX]中,即list[0]<list[1]l<...<list[MAX-1];我们要查找的数为num_search令 1eft、 right分 别 表 示 表 中 待查序列的左右端 点 ,初 值 分别为:left=0,right=MAX-1。再令 middle=(left+right)/2,为序列表 的 中间值 。 num_search和 list[middle]比较的 结果 ,有三种可能 :

(1)num_search<list[middle].此 时 ,如 果 num_search在 表 中 ,它一定 在 位 置0与midde-1之间 ,因此 ,把 right设成 middle-1.

(2) num_search==list[middle]。 此 时 , middle所指位置就是要找的数,函数返 回midd1e。

⑶ num_search>list[middle]。 此 时 ,如 果 searchnum在 表 中 ,它一定 在 位 置midde+1与MAX-1之间 ,因此 ,把 left设 成 middle+1.

为了程序的简洁和兼容性,这种比较可以定义一个比较宏COMPARE(x,y)来实现.

当 num_search还没被找到,同时尚有没检查到的其它整数,则我们重新计算 middle,重 复上述查找过程。

‌       接下来的程序是具体实现这种查找策略。程序实现了由用户自行设置序列个数LEN,然后由随机数生成函数生成各元素,采用上节课讲的选择排序算法将序列转换成由小至大排列的有序序列。

最后就是今天的算法关键啦☞《二分查找法》

包括两个子任务:

(1)表中是否还有未查找过的整数

(2)比较 num_search和 list[middle]。

(3)递归调用

无图无真相!

图片发自简书App
图片发自简书App
图片发自简书App

排序系列三: 二分查找法相关推荐

  1. 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)

    [经典排序算法]二分查找法 (动图演示 + C 语言代码实现)   

  2. 二分查找法及二分搜索树及其C++实现

    二分查找法及二分搜索树及其C++实现 二分查找法 二分查找简介 二分查找的实现 二分搜索树 二分搜索树简介 二分搜索树的实现 二分查找法 二分查找简介 二分查找是一种在每次比较之后将查找空间一分为二的 ...

  3. Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)

    二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...

  4. Java的Arrays类常用方法#冒泡排序#二分查找法#数组转换集合

    数组高级冒泡排序 方法一:(冒泡排序) /** 冒泡排序* 1,返回值类型,void* 2,参数列表,int[] arr* * 第一次:arr[0]与arr[1],arr[1]与arr[2],arr[ ...

  5. 二分查找法。Java泛型设计二分查找法。

    前言基础: 1.只能针对有序的数组进行查找. 2.时间复杂度为O(logn). 3.使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找 ...

  6. java for循环和数组--冒泡排序、二分查找法

    //100以内与7相关的数 for(int a=1;a<=100;a++){     if(a%7==0||a%10==7||a/10==7){      System.out.print(a+ ...

  7. 学习练习 java 二分查找法

    1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...

  8. 小白的算法初识课堂(part1)--二分查找法

    学习笔记 学习书目:<算法图解>- Aditya Bhargava 二分查找法 算法是一组完成任务的指令,任何代码片段都可视为算法.二分查找是一种算法,其输入是一个有序的元素列表(必须有序 ...

  9. 二分查找法(递归与循环实现)

    问题: 给定一个排序数组和一个数k,要求找到第一个k的位置和最后一个k的位置 解析: 由于给定的数组是从小到大排序的,故可以按照二分查找法来找,下面分别从递归和循环两种方法来阐述: //递归方法 in ...

最新文章

  1. 动态半导体ram依据什么存储信息_都是存储器,但RAM、ROM、闪存、硬盘怎么分?...
  2. 今日 Paper | 协作蒸馏;人脸反欺骗;人脸表示;3D-CariGAN等
  3. AI预测RNA结构登上Science封面,论文一作已成立药物公司开始招人
  4. SpringMVC-自定义转换器
  5. mysql 重复字段查询及排除重复值
  6. 2021牛客暑期多校训练营3
  7. 大容量存储方案_基因行业容器存储解决方案
  8. 线性表:5.约瑟夫环,循环链表及其C语言实现
  9. 检测表单是否合法,为什么不能用n++的探讨
  10. 常用的java包_java的常用包
  11. NMS(非极大值抑制)
  12. MacBook在任意文件夹目录打开终端
  13. Python自动化模拟键盘操作
  14. AlertManager警报通知 E-mail 微信 模板
  15. GIS空间分析实验教程期末重点91012
  16. 创基MIFI扩展坞自带4G上网功能扩展坞
  17. APP马甲包优化技巧制作流程(二)
  18. ro.secure与ro.debuggable
  19. 【eggjs的基本使用】
  20. llinu启动oracle数据库,RAID与磁盘阵列] USP-V将DS8000虚拟的全过程

热门文章

  1. windows 找不到文件 ‘C:\ApplicationC\UltraEdit24_18212\UltraEdit24.20.0.40(x64)\UltraEdit\uedit32.exe’
  2. wx小程序订阅消息概念和应用场景理解(一次性消息一定要人手动触发)
  3. STM32 —— Modbus 协议
  4. 微信公众号开发环境搭建(一)
  5. Go 性能优化之race实战
  6. 案例分析中可能的考点1:招投标程序
  7. 在 Linux 和 FireWire 上创建自己的 RAC 集群
  8. java - 深入篇 --Java的多线程实现
  9. python集成开发环境中可使用什么快捷键运行程序_在Python集成开发环境中,可使用()快捷键运行程序。...
  10. React Hooks (一文看懂四个常用的钩子)