既にソートされているリストに単一の整数を追加して、適切な場所に配置する必要があります。私の最初の考えは次のようなものでした
(sort (cons newelt list) #'<)
ただし、それlistが既にソートされている場合、実際に必要な挿入は1つだけです。つまり、で使用されるアルゴリズムによっては、このソリューションは恐ろしく不適切になる可能性があります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 14年
してみましょう
—
jfbu 14年
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、things ≤ neweltとCthose が含まれ、> newelt連結によって拡張ソートリストが生成されます。e-lisp言語があまり好きではないことをおologiesびします。