;; sort : list-of-numbers -> list-of-numbers (sorted)
;; to create a list of numbers with the same numbers as
;; alon sorted in descending order
(define (sorts alon)
(cond
[(empty? alon) empty]
[(cons? alon) (insert (first alon) (sorts (rest alon)))]))
(check-expect (sorts (list 3 5 6 7)) (list 7 6 5 3))
如果输入的长度低于某个阈值,使用上述内容的运动问题会产生快速排序版本
我不太清楚这个问题或他们想要的输出是什么。有什么帮助吗?
答案 0 :(得分:1)
真的没什么可做的了。如果我理解正确,您应该可以选择按两种不同的算法进行排序:如果输入列表的长度低于某个数字,请使用quicksort
,否则请使用上面定义的sorts
过程。无论哪种方式,预期输出都是一个排序的数字列表:
(define (my-sort alon threshold)
(if (< (length alon) threshold)
(quicksort alon)
(sorts alon)))
在你提出的问题中:
使用上面开发的快速排序版本
虽然 可以用quicksort
来编写insert
(仅仅是为了它),但这是毫无意义的,因为无论如何你必须对列表进行分区(例如,使用filter
),然后才能使用insert
,这最终只会调用cons
(在insert
的第二个条件中):
(define (quicksort alon)
(if (empty? alon)
empty
(append (quicksort (filter (lambda (x)
(< x (first alon)))
(rest alon)))
(insert (first alon)
(quicksort (filter (lambda (x)
(>= x (first alon)))
(rest alon)))))))