Sorting algorithms/Bubble sort: Difference between revisions

m
Line 1,785:
 
=={{header|REXX}}==
<lang REXXrexx>
/*REXX program, bubble sorts an array, indexusing the bubble-sort method. of array starts at 1. */
 
highItem=20call gen@ /*definegenerate aarray scoreelements. of elements*/
widthH=length(highItem)call show@ 'before sort' /*widthshow ofbefore biggestarray element#.elements*/
widthL=0 call bubbleSort highItem /*widthinvoke ofthe largestbubble elementsort. */
call showLshow@ ' after sort' /*show after array elements*/
exit
 
 
/*─────────────────────────────────────BUBBLESORT subroutine───────*/
bubbleSort: procedure expose L@.; parse arg n /*n=number of items.*/
/*diminish #items each time.*/
do m=nuntil done to 2 by -1 until done /*sort until it's done. */
done=1 /*assume it's done (1=true).*/
 
do j=1 for m n-1 /*sort M items this time. */
k=j+1 end /*point to next 1=trueitem. 0=false */
if L@.j>L@.nxtk then do /*out of order ? */
temp _=L@.j /*assign TEMP to current. a temp variable.*/
L@.j =L@.nxtk /*swap current with next. */
L@.nxtk=temp_ /*... and next with TEMP._ */
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
 
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
 
say copies('highItem=',sepLength)highItem-1 /*showadjust 2ndhighItem seperator lineslightly. */
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. */
show@: nxtwidthH=j+1 length(highItem) /*pointmaximum towidht nextof itemany 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)"':"' right(L@.j,widthL)
end
 
say copies('-',sepLength80) /*show 1sta seperator line. */
return
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
</lang>
Output:
<pre style="height:30ex;overflow:scroll">
element 1 before sort: ---letters of the Hebrew alphabet---
----------------------------
element 12 before sort: -101====================================
element 23 before sort: aleph 6[alef]
element 34 before sort: beth 3 [bet]
element 45 before sort: 12gimel
element 56 before sort: daleth 5[dalet]
element 67 before sort: 18he
element 78 before sort: waw 7 [vav]
element 89 before sort: 24zayin
element 910 before sort: heth 9[het]
element 1011 before sort: teth 30 [tet]
element 1112 before sort: 11yod
element 1213 before sort: kaph 36 [kaf]
element 1314 before sort: 13lamed
element 1415 before sort: 42mem
element 1516 before sort: 15nun
element 1617 before sort: 48samekh
element 1718 before sort: 17ayin
element 1819 before sort: 54pe
element 1920 before sort: sadhe 19 [tsadi]
element 2021 before sort: qoph 60 [qof]
element 22 2 afterbefore sort: 3resh
============================
element 23 before sort: shin
----------------------------
element 24 1 afterbefore sort: -101taw [tav]
────────────────────────────────────────────────────────────────────────────────
element 2 after sort: 3
element 31 after sort: ---letters of the 5Hebrew alphabet---
element 42 after sort: 6====================================
element 53 after sort: aleph 7[alef]
element 64 after sort: 9ayin
element 75 after sort: beth 11 [bet]
element 86 after sort: daleth 12[dalet]
element 97 after sort: 13gimel
element 10 8 after sort: 15he
element 11 9 after sort: heth 17[het]
element 1210 after sort: kaph 18 [kaf]
element 1311 after sort: 19lamed
element 1412 after sort: 24mem
element 1513 after sort: 30nun
element 1614 after sort: 36pe
element 1715 after sort: qoph 42 [qof]
element 1816 after sort: 48resh
element 1917 after sort: sadhe 54 [tsadi]
element 2018 after sort: 60samekh
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>