Saya perlu menambahkan satu bilangan bulat ke daftar yang sudah diurutkan, sehingga masuk di tempat yang tepat. Orang pertama saya kira-kira seperti itu
(sort (cons newelt list) #'<)
Namun, mengingat yang listsudah diurutkan, hanya satu penyisipan benar-benar diperlukan, yang berarti solusi ini bisa sangat tidak cocok tergantung pada algoritma yang digunakan oleh sort.
Jadi, algoritma apa yang sortdigunakan?
Akankah saya lebih baik melakukan sesuatu seperti yang berikut ini?
(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)
Bmenjadi awal sudah diurutkan listdan Adan Cawalnya kosong daftar. Dibagi Bdua bagian B1, B2panjang mdan matau m+1dan m, bandingkan neweltdengan elemen pertama B2. Jika neweltyaitu ≥memperluas Ake kanan dengan B1dan mengganti Bdengan B2, lain memperluas Cke kiri dengan B2dan mengganti Bdengan B1. Setelah O(log n)langkah-langkah tersebut tidak ada yang tersisa B. Kemudian Aberisi hal-hal ≤ newelt, dan Citu > newelt, dan rangkaian menghasilkan daftar diurutkan diperpanjang. Permintaan maaf untuk bahasa yang tidak terlalu e-lispsuka.