Sorting an array

Brian K. White brian at aljex.com
Thu May 19 23:37:30 PDT 2016


Late to the party I know, but, just to show how simple this is, one day 
I had this need myself, and I googled, discovered the bubble sort 
routine along with many others all on a nice wiki article, and indeed 
the bubble sort pseudo-code and BASIC sample code were trivial to 
transpose to filepro. It ended up being a whopping 6 lines of code, and 
3 of those are just "i=1" and "return"!

This sorts the array named dirl[]

Load up dirl[] with data.

Set N to the number of array elements that actually matter.
(The arrays are declared with 2048 elements, but I usually only have 10 
or so elements to sort, so it's a big deal to skip sorting 2000 empty 
elements for no reason. In your case you would probably just declare the 
arrays with 20 elements and set N = 20)

And then gosub bsrt

When you return, N elements of dirl[] will be sorted.

It's slooow. That's the nature of bubble sort though. Short simple code 
that doesn't rely on any fancy math or other functions that filePro 
doesn't have. But like you say for 20 elements you won't notice. I'm 
using this in a file selector dialog and it's sorting directory listings 
with a few hundred elements, and it takes an extra maybe 3/4 second vs 
when I comment out the gosub bsrt.

       If: 'directory list ; temp copy for bubble sort
     Then: dim dirl[2048](32) ; dim tmpl[2048](32)
     [...]
     Then: n = opendir("*",d{"")
     [...]
     Then: gosub bsrt
     Then: ' dirl[] is now sorted


bsrt  If: '** bubble sort dirl[] **
     Then: i = "1"
bsi   If:
     Then: r = "1"
bsr   If: dirl[r] gt dirl[r+"1"]
     Then: tmpl[r]=dirl[r] ;dirl[r]=dirl[r+"1"] ;dirl[r+"1"]=tmpl[r]
       If: r lt n-i
     Then: r = r + "1" ; goto bsr
       If: i lt n
     Then: fsel_i = fsel_i + "1" ; goto bsi
       If:
     Then: return



-- 
bkw


More information about the Filepro-list mailing list