Sorting algorithms/Bogosort: Difference between revisions
Content added Content deleted
m (→{{header|Java}}: Added note about comparable types) |
(remove sections moved to Permutation Sort) |
||
Line 20: | Line 20: | ||
} |
} |
||
</cpp> |
</cpp> |
||
=={{header|Haskell}}== |
|||
{{incorrect|Haskell}} |
|||
<pre> |
|||
import Control.Monad |
|||
bogosort l = head $ do p <- permute l |
|||
if sorted p then return p else mzero |
|||
sorted (e1 : e2 : r) = e1 <= e2 && sorted (e2 : r) |
|||
sorted _ = True |
|||
permute [] = return [] |
|||
permute (h:t) = do { t' <- permute t ; insert h t' } |
|||
insert e [] = return [e] |
|||
insert e l@(h : t) = return (e : l) `mplus` |
|||
do { t' <- insert e t ; return (h : t') } |
|||
</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
Line 69: | Line 50: | ||
} |
} |
||
}</java> |
}</java> |
||
=={{header|Prolog}}== |
|||
{{incorrect|Prolog}} |
|||
<pre> |
|||
bogosort(L,S) :- permutation(L,S), sorted(S). |
|||
sorted([]). |
|||
sorted([_]). |
|||
sorted([X,Y|ZS]) :- X =< Y, sorted([Y|ZS]). |
|||
permutation([],[]). |
|||
permutation([X|XS],YS) :- permutation(XS,ZS), select(X,YS,ZS). |
|||
</pre> |
|||
=={{header|Scheme}}== |
|||
{{incorrect|Scheme}} |
|||
<scheme> |
|||
(define (insertions e list) |
|||
(if (null? list) |
|||
(cons (cons e list) list) |
|||
(cons (cons e list) |
|||
(map (lambda (tail) (cons (car list) tail)) |
|||
(insertions e (cdr list)))))) |
|||
(define (permutations list) |
|||
(if (null? list) |
|||
(cons list list) |
|||
(apply append (map (lambda (permutation) |
|||
(insertions (car list) permutation)) |
|||
(permutations (cdr list)))))) |
|||
(define (sorted? list) |
|||
(cond ((null? list) #t) |
|||
((null? (cdr list)) #t) |
|||
((<= (car list) (cadr list)) (sorted? (cdr list))) |
|||
(else #f))) |
|||
(define (bogosort list) |
|||
(let loop ((permutations (permutations list))) |
|||
(if (sorted? (car permutations)) |
|||
(car permutations) |
|||
(loop (cdr permutations))))) |
|||
</scheme> |