이미 정렬 된 목록에 단일 정수를 추가해야 올바른 위치로 이동합니다. 내 첫 강인은
(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
하자
—
jfbu
B이미 정렬 초기 수 list와 A그리고 C처음에 빈 목록. 분할 B두 부분으로 B1, B2길이 m와 m나 m+1하고는 m, 비교 newelt의 첫 번째 요소 B2. 경우 neweltIS는 ≥확장 A과 오른쪽에 B1와 교체 B로 B2, 다른 확장 C과 그 왼쪽 B2과 교체 B와 함께 B1. O(log n)이러한 단계 후에 는 아무것도 남지 않습니다 B. 그런 다음 A사물 ≤ newelt과 C그 사물을 포함 > newelt하고 연결하면 확장 정렬 목록이 생성됩니다. e-lisp언어가 그리 좋지 않은 것에 대한 사과 .