bab*_*l92 3 performance scheme list quicksort
这就是我所做的:
(define qsort
(lambda (l)
(let ((lesser '()))
(let ((greater '()))
(cond
((null? l) '())
(else (map (lambda (ele)
(if (> (car l) ele)
(set! lesser (cons ele lesser))
(set! greater (cons ele greater)))) (cdr l))
(append (qsort lesser) (cons (car l) (qsort greater))))
)))))
Run Code Online (Sandbox Code Playgroud)
我注意到,当提供已经排序的列表时,它变得极其缓慢.经过一番搜索后,我发现如果以随机方式选择"枢轴",可以提高性能.然而,我知道实现这一目标的唯一方法是list-ref,它似乎是O(n).更糟糕的是,我必须实现一个类似cdr的函数来删除列表中的第n个元素,这可能也是非常低效的.
也许我的方向错了.你能给我一些建议吗?