既にソートされているリストに単一の整数を追加して、適切な場所に配置する必要があります。私の最初の考えは次のようなものでした
(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
とC
those が含まれ、> newelt
連結によって拡張ソートリストが生成されます。e-lisp
言語があまり好きではないことをおologiesびします。