> 1 <

Автор Сообщение

Loonar

Members


Статус

2 сообщений

Где: Russia
Род занятий:
Возраст:

#3359   2010-11-10 18:01 GMT+3 часа(ов)      
Всем здравствуйте. Помогите реализовать сортировку списка методом пузырька.
Заранее спасибо. желательно использовать самые примитивные функции (cdr append car list и тд)

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3360   2010-11-10 22:57 GMT+3 часа(ов)      
это баг такой, или щас мода пошла один и тот же вопрос по два раза задавать?
Вот моё извращение
(defun rw (L n)
;; меняет местами n и n+1
;; элементы списка
(cond
((zerop n) (append (list (cadr L)) (list (car L)) (cddr L)))
(T
(cons (car L) (rw (cdr L) (1- n))))))
 
;; то же, что и nth, но использует
;; примитивные функции
(defun mynth (n L)
(cond
((zerop n) (car L))
(T
(mynth (1- n) (cdr L)))))
 
(defun bubble (L direct)
(let ((len (- (length L) 1)))
(labels ((ret (L n)
(cond
;; если смогли пройти весь список
;; то он отсортирован
((= n len) L)
(T
(cond
;; если нет, то вызываем себя со списком, в котором
;; поменяли местами два элемента
((funcall direct (mynth (1+ n) L) (mynth n L)) (bubble (rw L n) direct))
(T
(ret L (1+ n))))))))
(ret L 0))))
 
(bubble '(3 7 9 88 5 34 8 0 6 3 7 7 2 54 8 6 3 2 6 8) #'>)
I wish I'd made you angry earlier
> 1 <


Онлайн :

0 пользователь(ей), 38 гость(ей) :