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 list
sudah 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 sort
digunakan?
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)
B
menjadi awal sudah diurutkan list
dan A
dan C
awalnya kosong daftar. Dibagi B
dua bagian B1
, B2
panjang m
dan m
atau m+1
dan m
, bandingkan newelt
dengan elemen pertama B2
. Jika newelt
yaitu ≥
memperluas A
ke kanan dengan B1
dan mengganti B
dengan B2
, lain memperluas C
ke kiri dengan B2
dan mengganti B
dengan B1
. Setelah O(log n)
langkah-langkah tersebut tidak ada yang tersisa B
. Kemudian A
berisi hal-hal ≤ newelt
, dan C
itu > newelt
, dan rangkaian menghasilkan daftar diurutkan diperpanjang. Permintaan maaf untuk bahasa yang tidak terlalu e-lisp
suka.