【发布时间】:2010-12-19 22:30:23
【问题描述】:
假设我有一个排序的列表
{thing1, thing2, thing3, ...}
和一个二进制比较函数,它说明一件事是否应该按该排序顺序排在另一件事之前。 (我说“事物”是因为它们不必是数字;它们可以是任意数据结构。)
我现在寻找一个函数,需要
- 事物的排序列表,
- 比较函数,和
- 一件事
并返回列表中应该插入新事物的第一对相邻事物。 也就是说,返回第一个相邻的对 {a,b} 使得 comp(a,x) 和 comp(x,b) 为真,其中 comp() 是比较函数。
例如,
pigeon[{1,3,5,7}, Less, 4]
应该返回
{3,5}
(编辑:如果给定的事物小于列表的第一个元素 a,则返回 {Null, a}。同样,如果它大于最后一个元素 z,则返回 {z, Null} . 此外,我们需要假设比较函数对于两个相同的元素返回 true(即,它类似于 LessEqual 而不是 Less),或者事物列表不包含被归类的事物。感谢 High Performance Mark 的捕获那个!)
我的第一个想法是使用 Split,然后分别取两个子列表的 Last 和 First。 我会将其发布为答案(或随意击败我),但我想有一种更有效或更优雅的方式。
【问题讨论】:
-
您是否假设列表的排序与比较功能一致?
-
@Yaroslav,是的。随意编辑问题以使其更清楚。
标签: sorting wolfram-mathematica