Necesito agregar un solo entero a una lista que ya está ordenada, de modo que vaya en el lugar correcto. Mi primer pensamiento fue algo como
(sort (cons newelt list) #'<)
Sin embargo, dado que listya está ordenado, solo se necesita una inserción, lo que significa que esta solución podría ser terriblemente inadecuada dependiendo del algoritmo utilizado sort.
Entonces, ¿ cuál es el algoritmo que sortusa?
¿Sería mejor hacer algo como lo siguiente?
(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)
Bser ordenados inicial ya liste Ay Clistas inicialmente vacías. Dividir Ben dos partes B1, B2de longitudes my mo m+1y m, comparar neweltcon el primer elemento de B2. Si neweltse ≥extiende Aa la derecha con B1y reemplaza Bcon B2, de lo contrario, se extiende Ca la izquierda con B2y reemplaza Bcon B1. Después de O(log n)tales pasos no queda nada adentro B. Luego Acontiene las cosas ≤ newelt, y Cesas > newelt, y la concatenación produce la lista ordenada extendida. Disculpas por el e-lisplenguaje no muy parecido.