方案排序列表

时间:2010-03-26 22:24:10

标签: list sorting scheme

好的,所以我试图列出一个列表并从最大到最小的排序。

Example:
> (maxheap (list 5 6 2 1 18 7))
;output:
> (18 7 6 5 2 1)

所以这就是我到目前为止所得到的:

(define (mkmaxheap heaplist)
  (let ((max (mymax(heaplist))))
  ;mymax is a func that returns max number, it works

    (let (( head (car heaplist)) (tail (cdr heaplist)))
      (if (null? tail)
         newlist))))

这就是我可以编译的全部内容,我编写的所有其他代码都失败了。任何帮助解决这个问题都将非常感激。

4 个答案:

答案 0 :(得分:3)

您应该仔细清楚地说明要用于生成排序列表的策略。是这样的吗?

  • 在列表中找到最大数量。
  • 获取除最大值之外的其余列表。
  • 对列表的其余部分进行排序,并将最大值放在其前面。

这不是一种非常快速的排序方式,但它应该有效。代码的下一步是编写一个函数来获取列表的其余部分(最大值除外)(如果列表有重复,请注意正确处理它。)

一旦你写完了,你应该能够编写看起来或多或少的方案代码,就像上面的大纲一样。

答案 1 :(得分:2)

这是Common lisp中的合并排序算法。它大致接近于在计划中实现相同的排序。

(defun merge-sort( input )
  (labels ((right-half ( input )
             (last input (ceiling (/ (length input) 2))))
           (left-half ( input )
             (ldiff input (right-half input ))))
    (if (or (null input) (null (cdr input))) 
        input 
        (merge 'list (merge-sort (left-half input)) (merge-sort (right-half input)) #'<))))

答案 2 :(得分:1)

您需要决定使用什么来对列表进行排序。最近我一直在修改方案,通过SICP和“Schemer”系列工作,我发现在方案中实现冒泡排序,合并排序和快速排序非常容易。

答案 3 :(得分:1)

您没有指定您正在使用的实现。但它可以实现r6rs list-sortsrfi-95 sort或任何其他内置排序。查看您的实施文档。