quick sort的思想是使用一个元素将表分成2个部分,其中一个部分是比改元素小,另外一部分是大于等于该元素。
在scheme里面实现起来相当直观
(define (qsort p lst)
(if (null? lst)
'()
(let ((e (car lst)) (rest (cdr lst)))
(let ((less (filter (lambda (x) (p x e)) rest))
(great (filter (lambda (x) (not (p x e))) rest)))
(append (qsort p less) (cons e (qsort p great)))))))
insert sort的实现简单讲就是先将除了第一个元素以外的元素排好序以后将第一个元素插入其中
(define (insert-sort p lst)
(define (insert-to-sorted e l)
(if (null? l)
(cons e '())
(if (p e (car l))
(cons e l)
(cons (car l) (insert-to-sorted e (cdr l))))))
(if (null? lst)
'()
(insert-to-sorted (car lst) (insert-sort p (cdr lst)))))
内部过程insert-to-sorted是将元素e插入到有序表l中