BBS: Inland Empire Archive Date: 04-01-92 (20:07) Number: 140 From: CHARLES GRAHAM Refer#: NONE To: ALL Recvd: NO Subj: External sorts Conf: (2) Quik_Bas
There are a number of reasonably efficient sorting
algorithms available for sorting data when all records are
contained inside an array, all at the same time. Such
internal sorts are fast and pretty straightforward.
But lately I've gotten interested in external sorts, i.e.,
sorting data that is never all in an array, all at the same
time. The following is such a sort, based on the standard
Shell Sort algorithm. It assumes there is a random-access
file of 1125 fixed-length, 60-byte records called
MERGADDR.FIL.
'XTERSORT.BAS Charles Graham, 1992
DEFINT A-Z
CONST True = -1
CONST False = NOT True
NumRecs = 1125
Gap = INT(NumRecs / 2)
RecLen = 60
File$ = "MERGADDR.FIL"
OPEN File$ FOR RANDOM AS 1 LEN = RecLen
FIELD #1, RecLen AS Rec$
DO
DO
MadeSwap = False
FOR Count = 1 TO NumRecs - Gap
GET #1, Count
LowRec$ = Rec$
GET #1, Count + Gap
HighRec$ = Rec$
IF LowRec$ > HighRec$ THEN
LSET Rec$ = LowRec$
PUT #1, Count + Gap
LSET Rec$ = HighRec$
PUT #1, Count
MadeSwap = True
END IF
NEXT Count
LOOP UNTIL NOT MadeSwap
Gap = INT(Gap / 2)
LOOP WHILE Gap > 0
CLOSE
END
It works flawlessly. What's the problem? Since physical
read and write operations to disk are orders of magnitude
slower than logical operations inside main memory, the sort
is _real_ slow.
So I was wondering if any of you had already developed some
fine-tuned code for external sorting. I'd be interesting in
seeing whatever you had.
--- QM v1.30
* Origin: QuikCom * St Charles MO * HST/V32 (1:100/602.0)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET