Sorting algorithms/Bubble sort: Difference between revisions

no edit summary
No edit summary
Line 1,788:
v <- c(9,8,7,3,1,100)
print(bubblesort(v))</lang>
 
=={{header|REXX}}==
<lang REXX>
/*REXX program, bubble sorts an array, index of array starts at 1. */
 
highItem=20 /*define a score of elements*/
widthH=length(highItem) /*width of biggest element#.*/
widthL=0 /*width of largest element. */
 
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
 
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. */
 
do j=1 for highItem
say 'element' right(j,widthH) arg(1)":" right(L.j,widthL)
end
 
say copies('=',sepLength) /*show 2nd seperator line. */
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).*/
 
do j=1 for m /*sort M items this time. */
nxt=j+1 /*point to next item. */
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
 
end
 
return
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/</lang>
Output:
<pre style="height:30ex;overflow:scroll">
----------------------------
element 1 before sort: -101
element 2 before sort: 6
element 3 before sort: 3
element 4 before sort: 12
element 5 before sort: 5
element 6 before sort: 18
element 7 before sort: 7
element 8 before sort: 24
element 9 before sort: 9
element 10 before sort: 30
element 11 before sort: 11
element 12 before sort: 36
element 13 before sort: 13
element 14 before sort: 42
element 15 before sort: 15
element 16 before sort: 48
element 17 before sort: 17
element 18 before sort: 54
element 19 before sort: 19
element 20 before sort: 60
============================
----------------------------
element 1 after sort: -101
element 2 after sort: 3
element 3 after sort: 5
element 4 after sort: 6
element 5 after sort: 7
element 6 after sort: 9
element 7 after sort: 11
element 8 after sort: 12
element 9 after sort: 13
element 10 after sort: 15
element 11 after sort: 17
element 12 after sort: 18
element 13 after sort: 19
element 14 after sort: 24
element 15 after sort: 30
element 16 after sort: 36
element 17 after sort: 42
element 18 after sort: 48
element 19 after sort: 54
element 20 after sort: 60
============================
</pre>
 
=={{header|Ruby}}==