本次笔记内容:
习题-IOM.1 插入排序的判断
习题-IOM.2 归并段的判断

文章目录

  • 题意理解
  • 捏软柿子算法(判断是否是插入排序)
  • 判断归并段的长度
    • 错误的想法
    • 一个正确的想法
  • 其他测试数据-最小N

题意理解

如何(从中间某个步骤)区分简单的插入和非递归的归并排序?(Insert Or Merge?)

如上图,插入排序的特点是行进过程中前面有序、后面没变化;归并排序的特点是分段有序。

捏软柿子算法(判断是否是插入排序)

如上图,是否为插入排序较好判断,因此先对其进行判断。

判断归并段的长度

错误的想法

从头开始连续有序子列的长度?

如上,不能认为当前归并段长度是4,因为:5、6有序,3、4又无序。这是归并排序只执行了一趟的结果。所以当前归并段长度是2,不能因为1、2、8、9正好有序就认为长度是4。

所有连续有序子列的最短长度?

如上,1在4的位置,可以判断归并排序进行了两趟(如果一趟的话,前面两个数字是2和4)。当前归并段长度是4。

一个正确的想法

for( l=2; l<=N; l*=2)

如上图,通过1与2(第一段的尾和第二段的头)、3与4(跳过两段2后)、7与8位(跳过两段2后)的比较,发现全部有序,则认为有序子列的长度至少是4(不是2)。则接着调用下面的算法。

如上,比较长度为4时,第一段尾和第二段头是否有序;在跳过两段4,比较是否有序。发现并非连贯有序。此时跳出循环,l是等于4的。

其他测试数据-最小N

如果想判断是哪种排序,N最小为4。

  • 插入排序第1步,什么都没变;
  • 归并排序第1步,什么都变了。

尾部子列无变化,但是前面变了(归并)。

当然,最大N的数据也需要在后续进行考虑,进行边界测试。

【数据结构笔记45】通过中间步骤区分简单插入排序和归并排序相关推荐

  1. 数据结构笔记(王道考研) 第五章:树和二叉树

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  2. 数据结构笔记(王道考研) 第七章:查找

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  3. 数据结构笔记--线性表定义与实现(Swift)

    数据结构笔记系列 数据结构笔记-两个有序链表合并成一个有序链表 线性表   线性表是最常用且最简单的一种数据结构,简言之,一个线性表是 n 个数据元素的有序序列. 特点 只有一个首结点和尾结点: 除首 ...

  4. 鸿钧老祖 数据结构笔记01:编程面试过程中常见的10大算法(java)

    以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: ...

  5. tensorflow笔记:流程,概念和简单代码注释

    tensorflow是google在2015年开源的深度学习框架,可以很方便的检验算法效果.这两天看了看官方的tutorial,极客学院的文档,以及综合tensorflow的源码,把自己的心得整理了一 ...

  6. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  7. 笔记45 | 代码性能优化建议[转]

    地址 笔记45 | 代码性能优化建议[转] 目录 前言 避免创建不必要的对象 选择Static而不是Virtual 常量声明为Static Final 避免内部的Getters/Setters 使用增 ...

  8. Linux学习笔记---移植官方linux步骤(二)

    目录 修改网络驱动 修改 LAN8720 的复位 以及网络时钟 引脚驱动 修改fec1和fec2节点pinctrl-0属性 修改LAN8720A的PHY地址 修改 fec_main.c 文件 配置 L ...

  9. Linux学习笔记---移植官方linux步骤(一)

    使用的开发板是正点原子IMX6U-MINI  EMMC512M的开发板,这个板子也是移植的NXP官方linux,所以这里就直接从NXP官方的linux移植. 这里所说的移植,其实不是自己编写驱动文件等 ...

最新文章

  1. python登录微信自动发送消息和绘画好友男女比例
  2. oracle 多个表 join 的先后顺序
  3. cocos2d-x初探学习笔记(15)--CCOrbitCamera
  4. SpringCloud Gateway配置自定义路由404坑
  5. 操作系统(李治军) L8 CPU管理的直观想法
  6. 输入一个以回车结束的字符串,判断该字符串是否对称(正序与逆序相同,如aBc2cBa为对称字符串)
  7. Linux中写入union作用,Linux进程描述符中union的用法
  8. Linux命令速查手册
  9. Oracle NID工具修改数据库DBID和数据库名称
  10. [原创]一个shell小案例
  11. python的property用法_Python的@property使用方法详解
  12. Benefits of 3D CAD Modeling for Today’s Mechanical Engineer
  13. 卷积神经网络卷积层BN层计算原理和卷积BN层融合
  14. cad尺寸标注快捷键_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
  15. linux 命令 cups,linux cups 打印机命令说明
  16. 计算机附件计算器的用法,计算机附件中计算器使用方法.doc
  17. 《自控力》第九章读书笔记
  18. Flume 常见配置zo
  19. 最全智能制造数字化应用方案
  20. AAA 及RADIUS协议配置

热门文章

  1. <input type=“file“> change事件异常处理办法
  2. Ajax解决浏览器的缓存问题
  3. libcrypto.so.1.0.0内容丢失导致sshd无法运行解决方案
  4. 爬坑系列----Redis查询key报空指针异常,而redis中确实存在该key
  5. su: Authentication failure 的解决方案
  6. 树莓派3B的WiFi中文乱码及搜索不到附近的WiFi_解决方案:
  7. 什么是Makefile.am和Makefile.in?
  8. 在打字稿中,是什么! (惊叹号/ bang)运算符取消引用成员时?
  9. Nginx安装手册,反向代理,负载均衡,keepalived高可用
  10. android将彩图转为黑白_Android逆向反编译代码注入APK过程思路分析