Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,37 @@
|
|||
(defun selection-sort-vector (array predicate)
|
||||
(do ((length (length array))
|
||||
(i 0 (1+ i)))
|
||||
((eql i length) array)
|
||||
(do ((mindex i)
|
||||
(min (aref array i))
|
||||
(j i (1+ j)))
|
||||
((eql j length)
|
||||
(rotatef (aref array i) (aref array mindex)))
|
||||
(when (funcall predicate (aref array j) min)
|
||||
(setf min (aref array j)
|
||||
mindex j)))))
|
||||
|
||||
(defun selection-sort-list (list predicate)
|
||||
(flet ((min-first (list)
|
||||
(do ((before-min nil)
|
||||
(min (first list))
|
||||
(prev list (rest prev))
|
||||
(curr (rest list) (rest curr)))
|
||||
((endp curr)
|
||||
(if (null before-min) list
|
||||
(let ((min (cdr before-min)))
|
||||
(rplacd before-min (cdr min))
|
||||
(rplacd min list)
|
||||
min)))
|
||||
(when (funcall predicate (first curr) min)
|
||||
(setf before-min prev
|
||||
min (first curr))))))
|
||||
(let ((result (min-first list)))
|
||||
(do ((head result (rest head)))
|
||||
((endp (rest head)) result)
|
||||
(rplacd head (min-first (rest head)))))))
|
||||
|
||||
(defun selection-sort (sequence predicate)
|
||||
(etypecase sequence
|
||||
(list (selection-sort-list sequence predicate))
|
||||
(vector (selection-sort-vector sequence predicate))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue