Thanx so much Dan, Its actually a relatively small list (potentially a max of 30 values to represent daily amounts in a month) so am going with the LOCATE method.
Thank you again On Jan 30, 4:48 pm, Daniel Klein <[email protected]> wrote: > The SORT() function can only do left-justified sorts and there is nothing > intrinsic in jBASE that will do this for you. > > The actual solution depends on how large the list of numbers, that needs to > be sorted, is. > > I'm sure other members will chime in with better/faster solutions but one > solution is to use LOCATE, e.g. > > 0001 TEST = -1 : @FM : 4 :@FM: -399 : @FM : 19 > 0002 N = DCOUNT(TEST,@FM) > 0003 TEST1 = '' > 0004 FOR X = 1 TO N > 0005 NUMBER = TEST<X> > 0006 LOCATE NUMBER IN TEST1 BY "AN" SETTING POS ELSE NULL > 0007 INS NUMBER BEFORE TEST1<POS> > 0008 NEXT X > 0009 CRT TEST > 0010 CRT TEST1 > > Another solution would be to use a binary search and insertion (ref. > Knuth's TAOCP Vol 3, Sorting and Searching), e.g. > > 0001 unsortedNumbers = -1 : @FM : 4 :@FM: -399 : @FM : 19 > 0002 sortedNumbers = '' > 0003 n = DCOUNT(unsortedNumbers, @FM) > 0004 FOR x = 1 TO n > 0005 number = unsortedNumbers<x> > 0006 found = 0 > 0007 lowerBound = 1 > 0008 upperBound = DCOUNT(sortedNumbers, @FM) > 0009 LOOP UNTIL lowerBound > upperBound OR found DO > 0010 midPoint = INT((lowerBound + upperBound) / 2) > 0011 midValue = sortedNumbers<1,midPoint> > 0012 IF number = midValue THEN found = midPoint ELSE > 0013 IF number < midValue THEN upperBound = midPoint - 1 > ELSE lowerBound = midPoint + 1 > 0014 END > 0015 REPEAT > 0016 IF NOT(found) THEN found = lowerBound > 0017 INS number BEFORE sortedNumbers<found> > 0018 NEXT x > 0019 CRT unsortedNumbers > 0020 CRT sortedNumbers > > I hear-tell that Quicksort would be another option. > > I suspect the binary search method will be faster but ymmv depending on how > many numbers are in the original list. > > But what do I know ;-) > > Dan > > > > > > > > On Mon, Jan 30, 2012 at 5:40 AM, master <[email protected]> wrote: > > Hi, > > > Is there a function to sort numerics (float and ints) in jbase? > > Sample this: > > > TEST = -1 : @FM : 4 :@FM: -399 : @FM : 19 > > TEST2 = SORT(TEST) > > > This gives > > TEST2 : -1^-399^19^4 > > > The function treats the values as string and therefore the result is, > > as per the expected outcome, wrong. > > > -- > > IMPORTANT: T24/Globus posts are no longer accepted on this forum. > > > To post, send email to [email protected] > > To unsubscribe, send email to [email protected] > > For more options, visit this group at > >http://groups.google.com/group/jBASE?hl=en -- IMPORTANT: T24/Globus posts are no longer accepted on this forum. To post, send email to [email protected] To unsubscribe, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jBASE?hl=en
