Tôi cần thêm một số nguyên duy nhất vào danh sách đã được sắp xếp, sao cho nó đi đúng chỗ. Suy nghĩ đầu tiên của tôi là một cái gì đó như
(sort (cons newelt list) #'<)
Tuy nhiên, do listđã được sắp xếp, chỉ cần một lần chèn, điều đó có nghĩa là giải pháp này có thể không phù hợp khủng khiếp tùy thuộc vào thuật toán được sử dụng sort.
Vậy, thuật toán sortsử dụng là gì?
Tôi sẽ tốt hơn nếu làm điều gì đó như sau?
(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)
Bđược ban đầu đã được sắp xếp listvà Avà Cdanh sách ban đầu rỗng. Chia làm Bhai phần B1, B2độ dài mvà mhoặc m+1, và mso sánh neweltvới phần tử đầu tiên của B2. Nếu neweltđược ≥mở rộng Asang bên phải bằng B1và thay thế Bbằng B2, thì mở rộng Csang bên trái bằng B2và thay thế Bbằng B1. Sau O(log n)các bước như vậy, không có gì còn lại trong B. Sau đó Achứa những thứ ≤ newelt, và Cnhững thứ đó > newelt, và ghép nối tạo ra danh sách được sắp xếp mở rộng. Xin lỗi vì không e-lispthích ngôn ngữ lắm.