当前位置: 首页 > news >正文

两个有序序列的合并-手摇算法

 

一 手摇算法(原地归并)原理
     手摇算法通过三次反转(reverse)交换相邻内存块,实现无需额外空间的合并。步骤如下:
1)反转左块;
2)反转右块;
3)反转合并后的块。

 

二  算法步骤

以数组 [1,4,7,9,2,5,6,8]为例,合并左块 [1,4,7,9]和右块 [2,5,6,8]。

1  初始状态
   
   左块:[1,4,7,9]  右块:[2,5,6,8]
   数组:[1,4,7,9,2,5,6,8]
   

2  比较 4和 2
      4 > 2,找到右块中连续比 4小的元素(仅 2)。
       交换左块 [4,7,9]和右块 [2]:
       反转左块 → [9,7,4]
       反转右块 → [2]
       合并反转 → [2,4,7,9]
       数组变为:[1,2,4,7,9,5,6,8]

3  比较 7 和 5
      7 > 5,找到右块中连续比 7 小的元素(5,6)。
      交换左块 [7,9]和右块 [5,6]:
      反转左块 → [9,7]
      反转右块 → [6,5]
      合并反转 → [5,6,7,9]
      数组变为:[1,2,4,5,6,7,9,8]

4  比较 9 和 8
     9 > 8,交换 [9] 和 [8]:
      反转左块

相关文章:

  • 【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)
  • [学成在线]09-课程预览
  • 论文阅读笔记:Denoising Diffusion Implicit Models (2)
  • Spring Boot 快速入手
  • node.js、npm相关知识
  • Redis 在 Linux 系统的安装指南
  • 【Docker项目实战】使用Docker部署NoteFlow笔记工具
  • 本地RAG知识库,如何进行数据结构化和清洗?
  • 在 Vue2 项目中配置自定义属性并在组件中使用,可按以下步骤进行:
  • 探秘 LPC 接收端重建:从理论根基到 Matlab 仿真实战
  • Android 应用程序包的 adb 命令
  • android studio 安装flutter插件
  • kubectl 命令
  • LLM的Sink(水槽) Token
  • 【漫话机器学习系列】168.最大最小值缩放(Min-Max Scaling)
  • 解锁兰亭妙微桌面端 UE/UI 设计,抢占数字先机
  • 主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
  • go游戏后端开发21:处理nats消息
  • 数据结构实验1.2: 顺序表的基本运算
  • 【CSS】- 表单控件的 placeholder 如何控制换行显示?
  • 【社论】以法治力量促进民企长远健康发展
  • 观察|22项达全球最优,世行为上海营商环境“盖章”
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 巴方称印军发动24起袭击,巴境内6处地点遭袭致8人死亡
  • 体坛联播|米兰逆转热那亚豪取3连胜,阿诺德官宣离开利物浦
  • 孙一凡的东欧狂想音乐会:一场穿越东欧的听觉绮梦