按升序对三个数字排序

问题描述:

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

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

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

+2

我不知道计划,但我可以告诉你,这是*不*功能,它是程序性的。 – 2011-05-01 16:33:43

+0

我的想法是有一个函数可以交换两个变量(a和b)的值大于b。不知道这是否会让这更体面,但。 感谢您花时间阅读此文:) – janvidar 2011-05-01 16:44:08

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

(sort < '(5 2 6)) 

回报

'(2 5 6) 

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

+0

谢谢** shadesandcolour **,我不知道'set!'是资源密集型的,我会继续研究它。另外,如果有人有兴趣,我只是发现这个[Scheme Sorting Examples](http://cs.gmu.edu/~white/CS363/Scheme/SchemeSamples.html) – janvidar 2011-05-01 16:48:59