Сортировка трех чисел в порядке возрастания - PullRequest
1 голос
/ 01 мая 2011

Вчера я вернулся домой и решил попробовать написать программу, которая будет сортировать три числа в порядке возрастания.Вот что я придумал:

(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 Ответ

2 голосов
/ 01 мая 2011

Схема имеет встроенную функцию сортировки, которая в некоторых случаях на самом деле быстрее, чем все используемые нами алгоритмы сортировки.

(sort < '(5 2 6))

возвращает

'(2 5 6)

Основная проблема, которую я вижу приВаша процедура заключается в том, что вы выполняете обмен только один раз.Это здорово, если вы можете гарантировать, что один всегда будет в середине двух других, но я не уверен, что так будет всегда.Также установлено!это довольно уродливо, и когда я выучил схему, мой профессор сказал мне не использовать ее, потому что она была ресурсоемкой, и есть лучшие способы сделать это.Я бы порекомендовал поместить их всех в список, а затем отсортировать и вытащить их из списка, если вы хотите сделать это таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...