ฉันต้องเพิ่มจำนวนเต็มเดียวในรายการที่เรียงลำดับแล้วซึ่งจะไปในตำแหน่งที่ถูกต้อง tought แรกของฉันเป็นอะไรที่ชอบ
(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
ชอบภาษา