Sorting algorithms/Bubble sort: Difference between revisions

Content added Content deleted
m (→‎{{header|Go}}: library change)
(→‎{{header|Scheme}}: Fix formatting, simplified, better variable names)
Line 2,335: Line 2,335:
Here is a recursive bubble sort which sorts list 'l' using the comparator 'f':
Here is a recursive bubble sort which sorts list 'l' using the comparator 'f':


<lang scheme>(define (bsort f l)
<lang scheme>(define (bsort l gt?)
(define (dosort l)
(define (dosort l)
(cond ((equal? (cdr l) '()) l)
(cond ((null? (cdr l))
l)
((f (car l) (cadr l)) (cons (cadr l) (dosort (cons (car l) (cddr l)))))
(else (cons (car l) (dosort (cdr l))))))
((gt? (car l) (cadr l))
(let ((r (dosort l)))
(cons (cadr l) (dosort (cons (car l) (cddr l)))))
(else
(cond ((equal? l r) l)
(cons (car l) (dosort (cdr l))))))
(else (bsort f r)))))</lang>
(let ((try (dosort l)))
(if (equal? l try)
l
(bsort try gt?))))
</lang>
For example, you could do
For example, you could do
<lang scheme>(bsort > '(3 2 1))
<lang scheme>(bsort > '(2 4 6 2))
(1 2 3)</lang>
(1 2 3)</lang>