我需要向已排序的列表中添加一个整数,以便将其放在正确的位置。我的第一个强项是
(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喜欢语言。