按升序排序三个数字

时间:2011-05-01 16:29:27

标签: scheme

我昨天回到家,决定尝试编写一个计划程序,按升序排序三个数字。这就是我想出的:

(define a 3)
(define b 2)
(define c 1)

(define temp 0)

(cond
    ( (> a c) (set! temp c) (set! c a) (set! a temp))
    ( (> b c) (set! temp c) (set! c b) (set! b temp))
    ( (> a b) (set! temp b) (set! b a) (set! a temp))
    ( (> b c) (set! temp c) (set! b c) (set! b temp))
)

(display a)
(display b)
(display c)

这是解决问题的功能性方式吗?你会建议什么?

1 个答案:

答案 0 :(得分:2)

Scheme有一个内置排序函数,在某些情况下实际上比我们使用的所有排序算法更快。

(sort < '(5 2 6))

返回

'(2 5 6)

我在您的程序中看到的主要问题是您只运行一次交换。如果你可以保证一个人总是处于另外两个人的中间,那就太棒了,但我不能确定总会如此。还设置!有点难看,当我学会计划时,我的教授告诉我不要使用它,因为它是资源密集型的,并且有更好的方法来实现它。我建议将它们全部放在一个列表中,然后将它们排序并将它们从列表中拉出来,如果你想这样做的话。