Sorting algorithms/Bogosort: Difference between revisions

Content added Content deleted
m (→‎{{header|J}}: Add lang tags)
m (Fixed lang tags.)
Line 117: Line 117:
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}


<lang algol>MODE TYPE = INT;
<lang algol68>MODE TYPE = INT;


PROC random shuffle = (REF[]TYPE l)VOID: (
PROC random shuffle = (REF[]TYPE l)VOID: (
Line 347: Line 347:
We use seq-utils' shuffle, which initializes a Java ArrayList with the input sequence, shuffle it, and then return a sequence of the result.
We use seq-utils' shuffle, which initializes a Java ArrayList with the input sequence, shuffle it, and then return a sequence of the result.


<lang lisp>(use 'clojure.contrib.seq-utils)
<lang clojure>
(use 'clojure.contrib.seq-utils)


(defn in-order? [cmp xs]
(defn in-order? [cmp xs]
Line 358: Line 357:
(defn bogosort [cmp xs]
(defn bogosort [cmp xs]
(if (in-order? cmp xs) xs
(if (in-order? cmp xs) xs
(recur cmp (shuffle xs))))
(recur cmp (shuffle xs))))</lang>
</lang>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
Line 436: Line 434:
=={{header|Fortran}}==
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
{{works with|Fortran|90 and later}}
<lang fortran> MODULE BOGO
<lang fortran>MODULE BOGO
IMPLICIT NONE
IMPLICIT NONE
CONTAINS
CONTAINS
FUNCTION Sorted(a)
FUNCTION Sorted(a)
LOGICAL :: Sorted
LOGICAL :: Sorted
INTEGER, INTENT(IN) :: a(:)
INTEGER, INTENT(IN) :: a(:)
INTEGER :: i
INTEGER :: i

Sorted = .TRUE.
DO i = 1, SIZE(a)-1
IF(a(i) > a(i+1)) THEN
Sorted = .FALSE.
EXIT
END IF
END DO
END FUNCTION Sorted

SUBROUTINE SHUFFLE(a)
INTEGER, INTENT(IN OUT) :: a(:)
INTEGER :: i, rand, temp
REAL :: x

DO i = SIZE(a), 1, -1
CALL RANDOM_NUMBER(x)
rand = INT(x * i) + 1
temp = a(rand)
a(rand) = a(i)
a(i) = temp
END DO
END SUBROUTINE
END MODULE

PROGRAM BOGOSORT

USE BOGO
IMPLICIT NONE
INTEGER :: iter = 0
INTEGER :: array(8) = (/2, 7, 5, 3, 4, 8, 6, 1/)
LOGICAL :: s
DO
Sorted = .TRUE.
DO i = 1, SIZE(a)-1
s = Sorted(array)
IF(a(i) > a(i+1)) THEN
IF (s) EXIT
CALL SHUFFLE(array)
Sorted = .FALSE.
EXIT
iter = iter + 1
END IF
END DO
WRITE (*,*) "Array required", iter, " shuffles to sort"
END DO
END FUNCTION Sorted
END PROGRAM BOGOSORT</lang>
SUBROUTINE SHUFFLE(a)
INTEGER, INTENT(IN OUT) :: a(:)
INTEGER :: i, rand, temp
REAL :: x
DO i = SIZE(a), 1, -1
CALL RANDOM_NUMBER(x)
rand = INT(x * i) + 1
temp = a(rand)
a(rand) = a(i)
a(i) = temp
END DO
END SUBROUTINE
END MODULE
PROGRAM BOGOSORT
USE BOGO
IMPLICIT NONE
INTEGER :: iter = 0
INTEGER :: array(8) = (/2, 7, 5, 3, 4, 8, 6, 1/)
LOGICAL :: s
DO
s = Sorted(array)
IF (s) EXIT
CALL SHUFFLE(array)
iter = iter + 1
END DO
WRITE (*,*) "Array required", iter, " shuffles to sort"
END PROGRAM BOGOSORT</lang>


=={{header|Groovy}}==
=={{header|Groovy}}==
Line 543: Line 541:
=={{header|Icon}}==
=={{header|Icon}}==


procedure shuffle(l)
<lang icon>procedure shuffle(l)
repeat {
repeat {
!l :=: ?l
!l :=: ?l
suspend l
suspend l
}
}
end
end

procedure sorted(l)
procedure sorted(l)
local i
local i
if (i := 2 to *l & l[i] >= l[i-1]) then return &fail else return 1
if (i := 2 to *l & l[i] >= l[i-1]) then return &fail else return 1
end
end

procedure main()
procedure main()
local l
local l
l := [6,3,4,5,1]
l := [6,3,4,5,1]
|( shuffle(l) & sorted(l)) \1 & every writes(" ",!l)
|( shuffle(l) & sorted(l)) \1 & every writes(" ",!l)
end
end</lang>


=={{header|J}}==
=={{header|J}}==
<lang j>bogo=: monad define
<lang j>bogo=: monad define
whilst. -. *./ 2 </\ Ry do. Ry=. (A.~ ?@!@#) y end. Ry
whilst. -. *./ 2 </\ Ry do. Ry=. (A.~ ?@!@#) y end. Ry
)</lang>
)
</lang>


=={{header|Java}}==
=={{header|Java}}==
Line 616: Line 613:
}
}
return v;
return v;
} </lang>
}</lang>


=={{header|Lua}}==
=={{header|Lua}}==
Line 647: Line 644:


=={{header|M4}}==
=={{header|M4}}==
<lang M4>
<lang M4>divert(-1)
divert(-1)
define(`randSeed',141592653)
define(`randSeed',141592653)
define(`setRand',
define(`setRand',
Line 687: Line 683:
show(`b')
show(`b')
bogosort(`b')
bogosort(`b')
show(`b')
show(`b')</lang>
</lang>


=={{header|MAXScript}}==
=={{header|MAXScript}}==
<pre>fn notSorted arr =
<lang maxscript>fn notSorted arr =
(
(
if arr.count > 0 then
if arr.count > 0 then
Line 726: Line 721:
)
)
arr
arr
)</pre>
)</lang>


=={{header|Modula-3}}==
=={{header|Modula-3}}==
Line 957: Line 952:


=={{header|R}}==
=={{header|R}}==
<lang R>
<lang R>bogosort <- function(x)
bogosort <- function(x)
{
{
is.sorted <- function(x) all(diff(x) >= 0)
is.sorted <- function(x) all(diff(x) >= 0)
Line 1,056: Line 1,050:
=={{header|Ursala}}==
=={{header|Ursala}}==


<lang Ursala>
<lang Ursala>#import std
#import std
#import nat
#import nat