끄적끄적

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)