理解练习有困难

时间:2013-11-09 15:55:54

标签: sorting scheme racket

;; 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))

如果输入的长度低于某个阈值,使用上述内容的运动问题会产生快速排序版本

我不太清楚这个问题或他们想要的输出是什么。有什么帮助吗?

1 个答案:

答案 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)))))))