ฉันต้องเพิ่มจำนวนเต็มเดียวในรายการที่เรียงลำดับแล้วซึ่งจะไปในตำแหน่งที่ถูกต้อง tought แรกของฉันเป็นอะไรที่ชอบ
(sort (cons newelt list) #'<)
แต่ให้ที่จะถูกจัดเรียงไว้แล้วเพียงหนึ่งแทรกมีความจำเป็นจริงๆซึ่งหมายถึงวิธีการแก้ปัญหานี้อาจจะไม่เหมาะสมอย่างน่ากลัวขึ้นอยู่กับอัลกอริทึมที่ใช้โดยlistsort
ดังนั้นอัลกอริทึมที่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ชอบภาษา