Re: reverse() function, was:Re: Win32Lib Update
- Posted by Irv Mullins <irv at ELLIJAY.COM> Nov 28, 1998
- 348 views
-- Here are your (Ralf & Hawke's) versions, plus a couple of other -- ways off the top of my head, timed: sequence before, after, start, fini before = "Now is the time for all good men to come get drunk at the party." function Reverse1 (sequence s) -- 7 seconds for 100,000 iterations sequence r r = {} for i = 1 to length(s) do r = prepend(r,s[i]) end for return r end function function Reverse2(sequence data) -- 4 seconds for 100,000 its. sequence result integer len, from len = length(data) from = len --i really could reuse len.... result = repeat(0,len) --BOOM, call alloc *once* for toindex = 1 to len do result[toindex] = data[from] from = from - 1 --and this takes 1 single tick... end for return result end function function Reverse3 (sequence s) -- 6 seconds for 100,000 its. atom temp, left, right left = 1 right = length(s) while left < right do temp = s[left] s[left] = s[right] s[right] = temp left = left + 1 right = right - 1 end while return s end function function Reverse4 (sequence s) -- 5 seconds atom x sequence r x = length(s) r = repeat(0,x) for i = 1 to x do r[i] = s[x-i+1] end for return r end function start = date() for i = 1 to 100000 do after = Reverse4(before) -- change the nuber to test other functions end for fini = date() printf(1,"Start: %02d:%02d:%02d\n",{start[4],start[5],start[6]}) printf(1,"Fini: %02d:%02d:%02d\n",{fini[4],fini[5],fini[6]}) puts(1,after) -- I feel sure there is a faster way. Any takers? -- Irv