Wednesday, February 22, 2012

Recursive Bubble Sorting in Scheme


;#########Bubble Sorting################;;

;This function when executed once, the lagest element reaches the end of the list
(define (loop L)
  (if (null? (cdr L))
      L
      (if (< (car L) (cadr L))
   (cons (car L) (loop (cdr L)))
   (cons (cadr L) (loop (cons (car L) (cddr L))))
      )
  )
)

;Funtion to return the last value in a list
(define (end-value L)
    (cond ((null? L) #f)
   ((null? (cdr L)) (car L))
   (else (end-value (cdr L)))
    )
)

;Function to return the list, removing the last element
(define (except-last L)
    (cond ((null? L) #f)
   ((null? (cdr L)) '() )
   (else (cons (car L)(except-last (cdr L))))
    )

)

;Function add an element to the end of a list
(define (add-to-end L e)
    (append L (list e))
)

(define (bubble-sort L)
    (if (or (null? L) (null? (cdr L)))
   L
 (add-to-end (bubble-sort (except-last (loop L)))
             (end-value (loop L))
 )
    )
)

No comments:

Post a Comment