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