Ich muss einer Liste, die bereits sortiert ist, eine einzelne Ganzzahl hinzufügen, damit sie an der richtigen Stelle abgelegt wird. Mein erster Unterricht war so etwas wie
(sort (cons newelt list) #'<)
Da dies listjedoch bereits sortiert ist, wird nur eine Einfügung wirklich benötigt, was bedeutet, dass diese Lösung je nach dem von verwendeten Algorithmus fürchterlich ungeeignet sein kann sort.
Welcher Algorithmus wird sortverwendet?
Wäre ich besser dran, wenn ich Folgendes täte?
(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)
Binitial sein bereits sortiert listund Aund Czunächst leere Listen. Split Bin zwei Teile B1, B2von Längen mund moder m+1und m, zu vergleichen , neweltum erste Element B2. Wenn neweltheißt ≥verlängern Amit seiner rechten B1und ersetzen Bmit B2, sonst zu verlängern , Cum seine linke mit B2und ersetzen Bmit B1. Nach O(log n)solchen Schritten ist nichts mehr drin B. Dann Aenthält die Dinge ≤ newelt, und Cdiejenigen > newelt, und Verkettung erzeugt die erweiterte sortierte Liste. Entschuldigung für nicht sehr e-lispähnliche Sprache.