मुझे पहले से हल की गई सूची में एक एकल पूर्णांक जोड़ने की जरूरत है, जैसे कि यह सही जगह पर जाता है। मेरा पहला संघर्ष कुछ ऐसा था
(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)
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
चीजों को शामिल करता है ≤ newelt
, और C
उन > newelt
, और संघनन विस्तारित सॉर्ट की गई सूची का उत्पादन करता है। e-lisp
भाषा की तरह नहीं के लिए माफी ।