最接近中位数的数 — 补充解法¶
Codex(GPT-6)补充解法:排序与双向合并。 将全部值升序排序,直接得到两倍中位数 \(T=b_{\lfloor(n-1)/2\rfloor}+b_{\lfloor n/2\rfloor}\) ,这里使用零基下标。
右指针从 \(\lfloor n/2\rfloor\) 开始,左指针从它前一项开始。左侧往左移动,值越来越小,到中位数的距离不减;右侧往右移动,距离也不减。两侧各自是一条按距离排序的序列。
每步比较两侧当前项的 \(|2b_i-T|\) ,选择距离较小的项;平局选择右侧,因为右侧数值不小于左侧。某一侧耗尽时从另一侧取。重复 \(k\) 次并求和,就是把两条有序序列合并后的前 \(k\) 项,故满足全部选择与平局规则。
排序时间 \(O(n\log n)\) ,合并时间 \(O(k)\) .数组占 \(O(n)\) 空间,所用排序实现还需要其调用栈空间。所有算术使用 64 位。
这份程序提供确定的排序时间界与清楚的双向有序结构,通过完整数据。其平均复杂度高于首选选择算法,不因代码写法不同而宣称速度更快。