끄적끄적
Insertion Sort (Lisp)
리리쟝
2022. 5. 1. 15:27
Lisp에서의 Insertion Sort
(setq lista(list 83 72 65 54 47 33 29 1))
(setq listb(list 11 33 23 45 13 25 8 135))
(defun insSort (list)
(print list) ;정렬하려는 리스트 원본 보여줌
(print '정렬시작----------------)
(setq a (length list)) ;a=length(list)
(setq i 1) ;i=1...
(loop while (< i a)
do(
progn
(setf front (nth i list)) ;front= list의 i 번째 요소
(setq j (- i 1)) ;j= i-1
(loop while (>= j 0)
do(progn
(setq k (+ j 1))
(setq back (nth j list)) ;back= list의 j 번째 요소
(cond
((>= front back)
(setq j -1) ;while문 탈출
)
((< front back)
(progn
(setf tmp (nth k list)) ;tmp= list[k]
(setf (nth k list) (nth j list)) ;list[k]= list[j]
(setf (nth j list) tmp) ;list[j]= tmp
)
)
)
(setq j (- j 1)) ;j--
)
)
(setq i (+ i 1)) ;i++
(print list) ;한 단계 정렬 결과 출력
)
)
)
(insSort lista)
(print '=======================)
(insSort listb)