Samozrejme, existuje viacero možných riešení tejto úlohy. Uvádzame tu riešenie založene na usporadúvaní typu bubble-sort.

V hlavnej funkcií budeme rekurzívne volať funkciu realizujúcu 1 cyklus bubble sortu (bubble), až kým sa v poli nebude nič meniť (bude také isté pred aj po prechode funkcie bubble), teda už bude usporiadané. Riešenie je také isté ako v príklade usporiadajv, len funkcia bubble realizuje zostupné usporiadanie.


; Funkcia bubble realizuje v podstate 1 cyklus bubble-sortu so zostupným
; usporadúvaním. Ak nájde (p1 p2...) také, že p1<p2 prehodí ich a pokračuje
; v hľadaní od p1 (p2 ! p1...).

(defun bubble (zoz)
 (cond ((null zoz) NIL)
       ((null (rest zoz)) zoz)
       ((< (first zoz) (second zoz)) (cons (second zoz) (bubble (cons (first zoz) (rest (rest zoz))))))
       (T (cons (first zoz) (bubble (rest zoz))))
 )
)

; Príklad:
(bubble '(10 1 7 5 15 0)) ; -> (10 7 5 15 1 0) 

; Hlavná funkcia (usporiadajz) volá funkciu bubble, až kým zoznam po jej
; prechode ostane nezmenený, čo znamená, že je usporiadaný.

(defun usporiadajz (zoz)
 (cond ((equal zoz (bubble zoz)) zoz)
       (T (usporiadajz (bubble zoz)))
 )
)

; Príklady:
(usporiadajz '(10 1 7 5 15 0)) ; -> (15 10 7 5 1 0)
(usporiadajz '(1 2 3 4 5 6 7)) ; -> (7 6 5 4 3 2 1)

 


Autori[ ZADANIE | AKO ZAČAŤ | RIEŠENIE ]
Posledná aktualizácia 4. 9. 2001
back  home  next