054振荡排序
振荡排序 (Oscillating Sort / Reversing Merge)054钟摆算法解码振荡排序故事钟摆的节拍在磁带机时代有一个令工程师头疼的问题磁带倒带很慢。每次排序合并之后都要把磁带倒回起始位置才能进行下一趟。这段倒带时间完全是浪费。1962年Sobel 提出了一个聪明的想法既然倒带这么贵为什么不让磁带永远向前走他的方案让奇数块的数据正向有序升序偶数块的数据反向有序降序。合并时既能从左往右读升序块也能从右往左读降序块——它们表现上都是有序的可以直接参与合并这就是振荡Oscillating数据像钟摆一样一会儿向左一会儿向右但无论哪个方向都是有序的都可以被高效地合并。算法原理振荡排序Oscillating Sort也称为 Reversing Merge记载于 TAOCP 第3卷第5.4.4节。核心思想内存分块排序Replacement Selection 或简单 QuickSort每次读取mem_size个元素到内存奇数块排序为升序偶数块排序为降序方向感知的合并升序 run从左往右读降序 run从右往左读等价于升序合并时统一按值从小到大输出振荡效果[1,3,5,7] [8,6,4,2] [2,4,6,9] [10,8,5,3] 升序↑ 降序↓ 升序↑ 降序↓ 合并后 → [1,2,2,3,4,5,6,7,8,9,...] 升序对比传统方法传统两路合并 生成所有升序 runs → 合并 → 倒带 → 合并 → 倒带 → ... 倒带开销不可忽视 振荡排序 奇升偶降 → 合并 → 无需倒带继续前进 适合直接存取的磁盘随机读写不需要倒带算法流程示例n16, mem_size4初始输入: [9,3,7,1, 8,2,6,4, 5,0,3,1, 2,8,4,6] 分块排序振荡: 块0升序: [1,3,7,9] 块1降序: [8,6,4,2] ← 存储为[8,6,4,2]从右读得[2,4,6,8] 块2升序: [0,1,3,5] 块3降序: [8,6,4,2] ← 存储为[8,6,4,2] 4路合并方向感知: 同时从4个块的有序方向取最小值 → [0,1,1,2,2,3,3,4,4,5,6,6,7,8,8,9]多趟振荡合并当初始 runs 太多内存不够同时打开所有 runs时分多趟趟1: 合并相邻两个 runs → 新的更大的升序/降序交替 runs 趟2: 再次合并 → 更少的 runs ... 最终: 只剩一个 run升序适用场景磁盘直接存取比磁带更灵活可以随机读写任意位置大数据集内存只需容纳少量元素绝大多数数据在磁盘流式处理数据一次读入一次写出无需多次遍历复杂度趟数: O(log(n/mem_size))每趟 I/O: O(n)内存: O(mem_size)远小于 n优势: 无倒带开销磁盘/磁带顺序访问效率最高振荡 vs 传统合并特性传统外部归并振荡排序run 方向全升序升降交替倒带需求需要不需要实现复杂度简单中等I/O 效率有倒带损耗高效适用存储磁带磁盘/直接存取现代意义振荡排序的方向交替思想在现代排序中仍有回响TimSort检测并利用降序段直接翻转而非忽略外部排序优化利用磁盘顺序读写特性避免随机寻址流式排序在大数据管道中方向感知合并减少缓冲区需求

相关新闻

055胜者树

055胜者树

胜者树/败者树(Tournament Tree)— 外排序的核心引擎 055胜者树:从体育锦标赛到大数据引擎5W1H 发明者故事 Who(何人)- 发明者是谁? 发明者:竞标赛排序(Tournament Sort&#xff0…

2026/10/1 18:45:48 阅读更多 →
Python第一次作业全攻略:从环境搭建到避坑指南

Python第一次作业全攻略:从环境搭建到避坑指南

第一次作业,这四个字能把多少人的编程热情直接浇灭,我当了这么多年Python课程的助教,每年都能看到一批学生在命令行前面耗到凌晨,最后交上来的却是一份自己都没运行成功的代码。其实Python第一次作业考察的东西远没有你想的那么玄…

2026/10/1 18:44:48 阅读更多 →
Kibana实战指南:从日志搜索到可视化看板的排查技巧

Kibana实战指南:从日志搜索到可视化看板的排查技巧

最近排查一个线上接口的偶发超时,我从告警平台点进Kibana,按Request ID把日志串起来,前后不到五分钟就锁定了是下游某台节点GC停顿导致。旁边新来的同事很惊讶,问我怎么做到这么快。其实在Kibana里这只是最基本的操作——但很多人…

2026/10/1 18:44:48 阅读更多 →

最新新闻

三个月转型AI应用前端:流式输出与工程化实战计划

三个月转型AI应用前端:流式输出与工程化实战计划

1. 三个月转型AI应用前端,这个计划到底靠不靠谱先把话说在前头:AI应用前端工程师,不是让你去训模型、调参、搞算力调度。这个岗位的核心是——把大模型的能力,用前端技术包装成用户能直接用的产品。你打开任何一个AI对话网页、AI写…

2026/10/1 19:23:07 阅读更多 →
基于深度学习的行人重识别系统Python源码:从毕业设计到工程落地

基于深度学习的行人重识别系统Python源码:从毕业设计到工程落地

简介:这份资源是面向计算机相关专业本科生及项目实战学习者的毕业设计源码包,主题为基于深度学习的行人重识别系统,适合正在准备毕设或需要中等难度实战项目练手的人群。压缩包共12个文件,以11个Python源码文件为主,另…

2026/10/1 19:23:07 阅读更多 →
GNN图神经网络预测实战:Python完整源码数据包与避坑指南

GNN图神经网络预测实战:Python完整源码数据包与避坑指南

简介:这份资源面向希望入门或进阶图神经网络预测任务的开发者与算法学习者,提供一套可直接运行的Python完整源码数据包,帮助解决从模型搭建到结果复现的实践问题。压缩包共32个文件,约8.34MB,以19个py脚本和4个ipynb交…

2026/10/1 19:23:07 阅读更多 →
软考软件设计师数据库技术基础:考点、范式与解题技巧全解析

软考软件设计师数据库技术基础:考点、范式与解题技巧全解析

如果你正在备考中级软考软件设计师,第九章“数据库技术基础”绝对是不能马虎的一章。它不光是上午题选择题的常客,下午场的数据库设计大题也基本从这里出,分值占比相当可观。更直白地说,数据库部分学好了,等于白捡十几…

2026/10/1 19:23:07 阅读更多 →
无监督SAR图像配准Python实战:从环境搭建到多尺度优化

无监督SAR图像配准Python实战:从环境搭建到多尺度优化

简介:这份资源面向计算机、人工智能、电子信息等专业的学生与开发者,提供一套可运行的无监督SAR图像配准Python实现,适合课程设计、毕业设计、大作业或初期项目立项演示,也便于零基础读者上手实战。压缩包共75个文件,以…

2026/10/1 19:23:07 阅读更多 →
GEO工程化实践:从Schema标记到RAG链路与Agent编排

GEO工程化实践:从Schema标记到RAG链路与Agent编排

1. 从SEO到GEO:内容可见性的战场已经换了规则做了七八年搜索优化的人,最近一两年应该都有一个共同的感受:以前那套关键词密度、外链数量、页面加载速度的打法,放到今天越来越不灵了。不是这些手段失效了,而是用户获取信…

2026/10/1 19:22:07 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →