home *** CD-ROM | disk | FTP | other *** search
- {
- > I might share With you a sorting Procedure which I developed For
- > 'those Arrays we were talking about:
- > ...
- > Exeperimentally I used it on 1485 Strings, which took about 3 sec
- > on my 386DX40. Could you advise on some method to do it even
- > faster?
-
- I'll share With you a little sort routine which I use often in my Programs
- whenever I need a fast and efficient routine With very low overhead... It Uses
- considerably less code than your example, and should outperForm it. (It would
- be even faster if it was all coded in Assembly!-- hint hint DJ) :-)
- }
-
- Procedure Sort_It( totalItems : Word );
-
- Function Is_Less( TemPtr1, TemPtr2 : Pointer ) : Boolean;
- begin
- Is_Less := ( YourStruct(TemPtr1^).Item < YourStruct(TemPtr2^).Item );
- end;
-
- Var
- I,J : Word;
- Cur : Word;
-
- begin
- For I := 1 to Pred(totalItems) do
- begin
- Cur := I;
-
- For J := I + 1 to totalItems do
- if Is_Less( Item[J], Item[Cur] ) then
- ExchangeLongInts( LongInt(Item[J]), LongInt(Item[Cur]) );
- end; { For }
-
- end; { Proc }
-
- {
- There's a couple things I should explain: The "ExchangeLongInts" Procedure is
- from the TurboPower Opro's OpInline Unit. All it does is exchange two LongInt
- Types without you having to use a temporary Variable. It's fast and convenient,
- but not the only possible solution here. (I'm Typecasting the Pointer into a
- LongInt For a 4-Byte swap.)
-
- "totalItems" is the total number of items in your Array to sort.
-
- "Item" is the actual Array; Item : Array[1..xx] of Pointer_to_Record;
-
- "YourStruct" used in the "Is_Less" Function is Typecasting the actual structure
- or Record that "Item" is referring to. It's the only portion of the code which
- looks at your actual data. to reverse the sort order, simply change the "<" to
- ">". to change what is being sorted, just change the ".Item" to something else
- like ".Name" or ".Zip" or whatever else might be contained in your structure.
-
- This routine is simple, has a minimum amount of code, Uses very little stack,
- works only With Pointers and you are only sorting memory addresses; it never
- actually move any of your physical data. (if you did, then it would be slow.)
-
- It'll sort several thousand items in only a couple seconds even on slower
- machines, and is super on small volume runs. I would imagine that it would
- (90 min left), (H)elp, More? start loosing steam around 1,000 to 2,000 items, but For me, it's the best
- choice when memory is at a premium and the Arrays are fairly small.
- }
-