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é.


; Funkcia bubble realizuje v podstate 1 cyklus bubble-sortu so vzostupný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íklady:
(bubble '(2 1))           ; -> (1 2)
(bubble '(10 1 7 5 15 0)) ; -> (1 7 5 10 0 15) 

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

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

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

 


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