How to resolve the algorithm Sorting algorithms/Bogosort step by step in the Action! programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Sorting algorithms/Bogosort step by step in the Action! programming language

Table of Contents

Problem Statement

Bogosort a list of numbers.

Bogosort simply shuffles a collection randomly until it is sorted. "Bogosort" is a perversely inefficient algorithm only used as an in-joke.
Its average run-time is   O(n!)   because the chance that any given shuffle of a set will end up in sorted order is about one in   n   factorial,   and the worst case is infinite since there's no guarantee that a random shuffling will ever produce a sorted sequence. Its best case is   O(n)   since a single pass through the elements may suffice to order them.

Pseudocode:

The Knuth shuffle may be used to implement the shuffle part of this algorithm.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Sorting algorithms/Bogosort step by step in the Action! programming language

Source code in the action! programming language

PROC PrintArray(INT ARRAY a INT size)
  INT i

  Put('[)
  FOR i=0 TO size-1
  DO
    IF i>0 THEN Put(' ) FI
    PrintI(a(i))
  OD
  Put(']) PutE()
RETURN

PROC KnuthShuffle(INT ARRAY tab BYTE size)
  BYTE i,j
  INT tmp

  i=size-1
  WHILE i>0
  DO
    j=Rand(i+1)
    tmp=tab(i)
    tab(i)=tab(j)
    tab(j)=tmp
    i==-1
  OD
RETURN

BYTE FUNC IsSorted(INT ARRAY tab BYTE size)
  BYTE i

  IF size<2 THEN
    RETURN (1)
  FI
  FOR i=0 TO size-2
  DO
    IF tab(i)>tab(i+1) THEN
      RETURN (0)
    FI
  OD
RETURN (1)

PROC BogoSort(INT ARRAY a INT size)
  WHILE IsSorted(a,size)=0
  DO
    KnuthShuffle(a,size)
  OD
RETURN

PROC Test(INT ARRAY a INT size)
  PrintE("Array before sort:")
  PrintArray(a,size)
  BogoSort(a,size)
  PrintE("Array after sort:")
  PrintArray(a,size)
  PutE()
RETURN

PROC Main()
  INT ARRAY
    a(10)=[1 4 65535 0 7 4 20 65530],
    b(21)=[3 2 1 0 65535 65534 65533],
    c(8)=[101 102 103 104 105 106 107 108],
    d(12)=[1 65535 1 65535 1 65535 1
      65535 1 65535 1 65535]
  
  Test(a,8)
  Test(b,7)
  Test(c,8)
  Test(d,12)
RETURN

  

You may also check:How to resolve the algorithm Water collected between towers step by step in the Factor programming language
You may also check:How to resolve the algorithm Metallic ratios step by step in the J programming language
You may also check:How to resolve the algorithm Null object step by step in the Raven programming language
You may also check:How to resolve the algorithm Magic squares of odd order step by step in the Ruby programming language
You may also check:How to resolve the algorithm Date manipulation step by step in the Raku programming language