Sorting algorithms/Bogosort: Difference between revisions

Content added Content deleted
(Replaced “import math” by “import random”. Removed proc “shuffle” as it is now provided by the module “random”.)
(Add Scheme implementation)
Line 2,944: Line 2,944:
After: 33 45 57 83 85
After: 33 45 57 83 85
</pre>
</pre>

=={{header|Scheme}}==
Uses [[Knuth shuffle]] to shuffle the list.
<lang scheme>(import (rnrs base (6))
(srfi :27 random-bits))

(define (shuffle lst)
(define (swap! vec i j)
(let ((tmp (vector-ref vec i)))
(vector-set! vec i (vector-ref vec j))
(vector-set! vec j tmp)))
(define vec (list->vector lst))
(let loop ((i (sub1 (vector-length vec))))
(unless (zero? i)
(swap! vec i (random-integer (add1 i)))
(loop (sub1 i))))
(vector->list vec))

(define (sorted? lst pred?)
(cond
((null? (cdr lst)) #t)
((pred? (car lst) (cadr lst)) (sorted? (cdr lst) pred?))
(else #f)))

(define (bogosort lst)
(if (sorted? lst <)
lst
(bogosort (shuffle lst))))


(let ((input '(5 4 3 2 1)))
(display "Input: ")
(display input)
(newline)
(display "Output: ")
(display (bogosort input))
(newline))</lang>
{{out}}
<pre>Input: (5 4 3 2 1)
Output: (1 2 3 4 5)</pre>


=={{header|Smalltalk}}==
=={{header|Smalltalk}}==