How to resolve the algorithm Sorting algorithms/Bead sort step by step in the PL/I programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Sorting algorithms/Bead sort step by step in the PL/I programming language

Table of Contents

Problem Statement

Sort an array of positive integers using the Bead Sort Algorithm. A   bead sort   is also known as a   gravity sort.

Algorithm has   O(S),   where   S   is the sum of the integers in the input set:   Each bead is moved individually. This is the case when bead sort is implemented without a mechanism to assist in finding empty spaces below the beads, such as in software implementations.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Sorting algorithms/Bead sort step by step in the PL/I programming language

Source code in the pl/i programming language

/* Handles both negative and positive values. */

maxval: procedure (z) returns (fixed binary);
   declare z(*) fixed binary;
   declare (maxv initial (0), i) fixed binary;
   do i = lbound(z,1) to hbound(z,1);
      maxv = max(z(i), maxv);
   end;
   put skip data (maxv); put skip;
   return (maxv);
end maxval;
minval: procedure (z) returns (fixed binary);
   declare z(*) fixed binary;
   declare (minv initial (0), i) fixed binary;

   do i = lbound(z,1) to hbound(z,1);
      if z(i) < 0 then minv = min(z(i), minv);
   end;
   put skip data (minv); put skip;
   return (minv);
end minval;

/* To deal with negative values, array elements are incremented */
/* by the greatest (in magnitude) negative value, thus making   */
/* them positive. The resultant values are stored in an         */
/* unsigned array (PL/I provides both signed and unsigned data  */
/* types). At procedure end, the array values are restored to   */
/* original values.                                             */

(subrg, fofl, size, stringrange, stringsize):
beadsort: procedure (z);                        /* 8-1-2010 */
   declare (z(*)) fixed binary;
   declare b(maxval(z)-minval(z)+1) bit (maxval(z)-minval(z)+1) aligned;
   declare (i, j, k, m, n) fixed binary;
   declare a(hbound(z,1)) fixed binary unsigned;
   declare offset fixed binary initial (minval(z));

   PUT SKIP LIST('CHECKPOINT A'); PUT SKIP;
   n = hbound(z,1);
   m = hbound(b,1);

   if offset < 0 then
      a = z - offset;
   else
      a = z;

   b = '0'b;

   do i = 1 to n;
      substr(b(i), 1, a(i)) = copy('1'b, a(i));
   end;
   do j = 1 to m; put skip list (b(j)); end;

   do j = 1 to m;
      k = 0;
      do i =1 to n;
         if substr(b(i), j, 1) then k = k + 1;
      end;
      do i = 1 to n;
         substr(b(i), j, 1) = (i <= k);
      end;
   end;
   put skip;
   do j = 1 to m; put skip list (b(j)); end;

   do i = 1 to n;
      k = 0;
      do j = 1 to m; k = k + substr(b(i), j, 1); end;
      a(i) = k;
   end;
   if offset < 0 then z = a + offset; else z = a;

end beadsort;

*process source attributes xref;
 /* Handles both negative and positive values. */
 Beadsort: Proc Options(main);
 Dcl sysprint Print;
 Dcl (hbound,max,min) Builtin;

 Dcl z(10) Bin Fixed(31) Init(10,-12,1,0,999,8,2,2,4,4);
 Dcl s(10) Bin Fixed(31);
 Dcl (init,lo,hi) Bin Fixed(31) Init(0);
 Dcl (i,j) Bin Fixed(31) Init(0);

 Call minmax(z,init,lo,hi);

 Begin;
 Dcl beads(lo:hi) Bin Fixed(31);
 beads=0;
 Do i=1 To hbound(z);
   beads(z(i))+=1;
   End;
 Do i=lo To hi;
   Do While(beads(i)>0);
     j+=1;
     s(j)=i;
     beads(i)-=1;
     End;
   End;
 Put Edit(' Input:',(z(i) Do i=1 To hbound(z)))(skip,a,99(f(4)));
 Put Edit('Sorted:',(s(i) Do i=1 To hbound(s)))(skip,a,99(f(4)));
 End;

 minmax: Proc(z,init,lo,hi);
 Dcl z(*) Bin Fixed(31);
 Dcl (init,lo,hi) Bin Fixed(31);
 Do i=1 To hbound(z);
   If init=0 Then Do;
     init=1;
     lo,hi=z(i);
     End;
   Else Do;
     lo=min(lo,z(i));
     hi=max(hi,z(i));
     End;
   End;
 End;

 End;

  

You may also check:How to resolve the algorithm Sorting algorithms/Bead sort step by step in the J programming language
You may also check:How to resolve the algorithm Loops/Downward for step by step in the Factor programming language
You may also check:How to resolve the algorithm Comma quibbling step by step in the EasyLang programming language
You may also check:How to resolve the algorithm Department numbers step by step in the JavaScript programming language
You may also check:How to resolve the algorithm Exceptions/Catch an exception thrown in a nested call step by step in the FreeBASIC programming language