Sorting algorithms/Bubble sort: Difference between revisions

Content added Content deleted
Line 1,785: Line 1,785:


=={{header|REXX}}==
=={{header|REXX}}==
<lang REXX>
<lang rexx>
/*REXX program, bubble sorts an array, index of array starts at 1. */
/*REXX program sorts an array using the bubble-sort method. */


highItem=20 /*define a score of elements*/
call gen@ /*generate array elements. */
widthH=length(highItem) /*width of biggest element#.*/
call show@ 'before sort' /*show before array elements*/
widthL=0 /*width of largest element. */
call bubbleSort highItem /*invoke the bubble sort. */
call show@ ' after sort' /*show after array elements*/
exit


/*─────────────────────────────────────BUBBLESORT subroutine───────*/
bubbleSort: procedure expose @.; parse arg n /*n=number of items.*/
/*diminish #items each time.*/
do until done /*sort until it's done. */
done=1 /*assume it's done (1=true).*/

do j=1 for n-1 /*sort M items this time. */
k=j+1 /*point to next item. */
if @.j>@.k then do /*out of order ? */
_=@.j /*assign to a temp variable.*/
@.j=@.k /*swap current with next. */
@.k=_ /*... and next with _ */
done=0 /*indicate it's not done. */
end /* 1=true 0=false */
end


do k=1 for highItem /*populate the array. */
L.k=2*k + (k * -1**k) /*kinda generate randomish#.*/
if L.k<2 then L.k=-100-k /*if < 2, make a negative# */
widthL=max(widthL,length(L.k)) /*compute max width so far. */
end
end


return
call showL 'before sort' /*show before array elements*/
call bubbleSort highItem /*invoke the bubble sort. */
call showL ' after sort' /*show after array elements*/
exit


showL: sepLength=22+widthH+widthL /*compute seperator width. */
say copies('-',sepLength) /*show 1st seperator line. */


/*─────────────────────────────────────GEN@ subroutine─────────────*/
do j=1 for highItem
gen@: @.='' /*assign default value. */
say 'element' right(j,widthH) arg(1)":" right(L.j,widthL)

@.1 ='---letters of the Hebrew alphabet---'
@.2 ='===================================='
@.3 ='aleph [alef]'
@.4 ='beth [bet]'
@.5 ='gimel'
@.6 ='daleth [dalet]'
@.7 ='he'
@.8 ='waw [vav]'
@.9 ='zayin'
@.10='heth [het]'
@.11='teth [tet]'
@.12='yod'
@.13='kaph [kaf]'
@.14='lamed'
@.15='mem'
@.16='nun'
@.17='samekh'
@.18='ayin'
@.19='pe'
@.20='sadhe [tsadi]'
@.21='qoph [qof]'
@.22='resh'
@.23='shin'
@.24='taw [tav]'

do highItem=1 while @.highItem\=='' /*find how many entries. */
end
end


say copies('=',sepLength) /*show 2nd seperator line. */
highItem=highItem-1 /*adjust highItem slightly. */
return
return


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
bubbleSort: procedure expose L.; parse arg n /*n=number of items.*/
/*diminish #items each time.*/
do m=n to 2 by -1 until done /*sort until it's done. */
done=1 /*assume it's done (1=true).*/


/*─────────────────────────────────────SHOW@ subroutine────────────*/
do j=1 for m /*sort M items this time. */
nxt=j+1 /*point to next item. */
show@: widthH=length(highItem) /*maximum widht of any line.*/
if L.j>L.nxt then do /*out of order ? */
temp =L.j /*assign TEMP to current. */
L.j =L.nxt /*swap current with next. */
L.nxt=temp /*... and next with TEMP. */
done=0 /*indicate it's not done. */
end /* 1=true 0=false */
end


do j=1 for highItem
say 'element' right(j,widthH) arg(1)':' @.j
end
end


say copies('',80) /*show a seperator line. */
return
return
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
</lang>
</lang>
Output:
Output:
<pre style="height:30ex;overflow:scroll">
<pre style="height:30ex;overflow:scroll">
element 1 before sort: ---letters of the Hebrew alphabet---
----------------------------
element 1 before sort: -101
element 2 before sort: ====================================
element 2 before sort: 6
element 3 before sort: aleph [alef]
element 3 before sort: 3
element 4 before sort: beth [bet]
element 4 before sort: 12
element 5 before sort: gimel
element 5 before sort: 5
element 6 before sort: daleth [dalet]
element 6 before sort: 18
element 7 before sort: he
element 7 before sort: 7
element 8 before sort: waw [vav]
element 8 before sort: 24
element 9 before sort: zayin
element 9 before sort: 9
element 10 before sort: heth [het]
element 10 before sort: 30
element 11 before sort: teth [tet]
element 11 before sort: 11
element 12 before sort: yod
element 12 before sort: 36
element 13 before sort: kaph [kaf]
element 13 before sort: 13
element 14 before sort: lamed
element 14 before sort: 42
element 15 before sort: mem
element 15 before sort: 15
element 16 before sort: nun
element 16 before sort: 48
element 17 before sort: samekh
element 17 before sort: 17
element 18 before sort: ayin
element 18 before sort: 54
element 19 before sort: pe
element 19 before sort: 19
element 20 before sort: sadhe [tsadi]
element 20 before sort: 60
element 21 before sort: qoph [qof]
element 22 before sort: resh
============================
element 23 before sort: shin
----------------------------
element 1 after sort: -101
element 24 before sort: taw [tav]
────────────────────────────────────────────────────────────────────────────────
element 2 after sort: 3
element 3 after sort: 5
element 1 after sort: ---letters of the Hebrew alphabet---
element 4 after sort: 6
element 2 after sort: ====================================
element 5 after sort: 7
element 3 after sort: aleph [alef]
element 6 after sort: 9
element 4 after sort: ayin
element 7 after sort: 11
element 5 after sort: beth [bet]
element 8 after sort: 12
element 6 after sort: daleth [dalet]
element 9 after sort: 13
element 7 after sort: gimel
element 10 after sort: 15
element 8 after sort: he
element 11 after sort: 17
element 9 after sort: heth [het]
element 12 after sort: 18
element 10 after sort: kaph [kaf]
element 13 after sort: 19
element 11 after sort: lamed
element 14 after sort: 24
element 12 after sort: mem
element 15 after sort: 30
element 13 after sort: nun
element 16 after sort: 36
element 14 after sort: pe
element 17 after sort: 42
element 15 after sort: qoph [qof]
element 18 after sort: 48
element 16 after sort: resh
element 19 after sort: 54
element 17 after sort: sadhe [tsadi]
element 20 after sort: 60
element 18 after sort: samekh
element 19 after sort: shin
============================
element 20 after sort: taw [tav]
element 21 after sort: teth [tet]
element 22 after sort: waw [vav]
element 23 after sort: yod
element 24 after sort: zayin
────────────────────────────────────────────────────────────────────────────────
</pre>
</pre>