Py算法与数据结构

15 归并排序

稳定合并、缓冲、链表与外部有序段

本节 12 题。先独立给出结论和理由,再对照解析;新增题与此前题目统一编号。涉及标签时,标签只表示记录身份。
第 01 题

问题 1

归并 [30,46,95] 与 [15,26,90] 的结果?

第 02 题

问题 2

长度 p、q 的两个非空有序序列最多比较多少次?

第 03 题

问题 3

稳定合并遇到相等键应优先取哪边?

第 04 题

问题 4

为什么不应反复调用 list.pop(0) 实现线性合并?

第 05 题

问题 5

数组归并的拆分是否必须先按键值划分?

第 06 题

问题 6

本教材 merge_sort(a) 会修改原 a 吗?

第 07 题

问题 7

数组版归并辅助空间是什么?

第 08 题

问题 8

已经升序的数据在本实现中会自动降为 O(n) 时间吗?

第 09 题

问题 9

链表拆分为什么必须 slow.next=None?

第 10 题

问题 10

递归链表归并不使用数组 work,所以额外空间是 O(1) 吗?

第 11 题

问题 11

倒序右半缓冲 [1L,2B,2A] 两端取值且相等取左,是否保持右半 2A、2B 的原顺序?

第 12 题

问题 12

external_merge_demo 把有序段全存在内存并 list(merge(...)),算完整外部排序器吗?