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}}== |