我需要向已排序的列表中添加一个整数,以便将其放在正确的位置。我的第一个强项是
(sort (cons newelt list) #'<)
但是,鉴于list
已经排序,实际上只需要一个插入,这意味着取决于所使用的算法,该解决方案可能非常不合适sort
。
那么,使用哪种算法sort
?
我会做以下更好的方法吗?
(let ((tail list))
;; The first element is never less-than
(while (and tail (< newelt (cadr tail)))
(setq tail (cdr tail)))
(setcdr tail (cons newelt (cdr tail)))
list)
1
如果我的代码中经常执行此操作,则应使用二进制堆(例如heap.el)。
—
lunaryorn 2014年
让我们
—
2014年
B
先对其进行排序list
,A
然后将其C
初始为空列表。分割B
为两个部分B1
,B2
长度m
和m
或m+1
和m
,比较newelt
于第一元件B2
。如果newelt
就是≥
延长A
其使用权B1
和替换B
用B2
,否则扩大C
其左侧具有B2
和替换B
用B1
。经过O(log n)
这样的步骤后,什么也不会剩下B
。然后A
包含事物≤ newelt
,事物和C
那些> newelt
,并串联产生扩展的排序列表。道歉不是很e-lisp
喜欢语言。