home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / BAS_SORT.ZIP / RIPLSOR2.BAS < prev    next >
BASIC Source File  |  1989-07-20  |  25KB  |  470 lines

  1. ' ******************************************
  2. ' ** Name:     RIPLSOR2.BAS               **
  3. ' ** Type:     Main Module                **
  4. ' ** Language  Microsoft QuickBASIC 4.00  **
  5. ' ** Author:   Mike Welch:  Dallas, TX    **
  6. ' ** Comments: The main module here is    **
  7. ' **           provided simply to be used **
  8. ' **           as an example sort.        **
  9. ' **       *   This is a modification of  **
  10. ' **           Mike Shaffer's (Dallas)    **
  11. ' **           modification of the ripple **
  12. ' ******************************************
  13.  
  14. DECLARE SUB XSort (Ar$(), Arn%, XSrTime!)
  15. DIM SHARED Ar$(0 TO 1000)                         ' dimension sort array
  16. CONST FALSE% = 0, TRUE% = NOT FALSE%              ' used for flags in sort
  17.  
  18. CLS                                               ' clear screen
  19. PRINT "   *----------------------- Ripple Sort Test Run ------------------------*"
  20. PRINT
  21. PRINT "    - A modification of Richard F. Ashwell III's Mentat sort algorithim."
  22. PRINT
  23. PRINT "   You have 1 option in this test run.  You may have the output go to any"
  24. PRINT "   of three devices; a disk file (any name), LPT1: (printer), or SCRN:,"
  25. PRINT "   (the screen).  Note that if you want LPT1: or SCRN: you MUST include"
  26. PRINT "   the colon [:] or an error message will occur."
  27. PRINT
  28. PRINT "   So, what'll it be? ([filename], [SCRN:], or [LPT1:]): ";
  29. INPUT Device$                                     ' get output device
  30. IF Device$ = "" THEN                              ' if user pressed ENTER
  31.     BEEP                                         ' beep alert
  32.     PRINT "   Error - program aborted"           ' print quit message and
  33.     END                                          ' end program
  34. END IF
  35. Device$ = UCASE$(Device$)                         ' convert to uppercase
  36. PRINT "   Okay, output will go to "; Device$;     ' print reply
  37. PRINT "   Strike a key to continue";              ' print pause message
  38. DO                                                ' and wait for a key
  39.     LOCATE , , 1
  40. LOOP WHILE INKEY$ = ""
  41.  
  42.     ' open Device$.  BASIC will report any error messages as they occur.
  43. OPEN Device$ FOR OUTPUT AS 1                      ' open device (file, etc.)
  44.  
  45. PRINT
  46. PRINT "   Reading in data"
  47.  
  48.     ' Read the random data included as DATA statements below
  49.     ' (1000 statements exist).
  50. PRINT #1, "*-------------------- Unsorted Arrays ----------------------*"
  51. FOR i% = 1 TO 1000                                ' get 1000 strings to sort
  52.     READ Ar$(i%)                                 ' put data into array to sort
  53.     PRINT #1, Ar$(i%)                            ' print non-sorted array to device
  54. NEXT i%
  55. PRINT
  56. PRINT "Sorting...";
  57. PRINT
  58.  
  59. BeginTime! = TIMER                                ' save beginning timer value
  60. CALL XSort(Ar$(), 1000, XSrTime!)                 ' call sort routine
  61. EndTime! = TIMER                                  ' stop the clock!
  62. SortTime! = EndTime! - BeginTime!                 ' determine time required to sort
  63.  
  64. PRINT
  65. PRINT CHR$(7); "Sort complete!: "; SortTime!; "required to sort 1000 records!"
  66. PRINT
  67. PRINT "Strike a key to see sorted output to "; Device$; "...";
  68. DO
  69.     LOCATE , , 1
  70. LOOP WHILE INKEY$ = ""
  71.  
  72. PRINT #1, ""
  73. PRINT #1, ""
  74. PRINT #1, "*------------------------- Sorted Arrays ----------------------*"
  75. FOR i% = 1 TO 1000
  76.     PRINT #1, Ar$(i%)
  77. NEXT i%
  78.  
  79. PRINT
  80. PRINT "Demo Finished"
  81. END
  82.  
  83.  
  84.     ' Sort data follows
  85. DATA "DRHALO   EXE", "PRESENTS EXE", "SETUP    EXE"
  86. DATA "CENTMED  FON", "CURSBOLD FON", "CURSIVE  FON", "CPU"
  87. DATA "DISKETTE", "DRIVE", "SOFTWARE", "HARDWARE"
  88. DATA "GRAPHICS", "MONITOR", "UTILITY", "BASCOM"
  89. DATA "MICROSOF", "TRUMAN", "HISTORY", "GRETSORT"
  90. DATA "F12X12   FON", "WEEKLY   NEW", "UNDO     CMD", "ABORT    CMD"
  91. DATA "PASTE    CMD", "PRINT    COL", "EXIT     YOU", "DELETE   THI"
  92. DATA "UNCASH   BIL", "WEAKSEAK DEK", "IBMBIO   COM", "IBMDOS   COM"
  93. DATA "AUTOEXEC BAT", "COMMAND  COM", "CONFIG   SYS", "MAIN     BAT"
  94. DATA "B1       COM", "BENHMARK", "BIOS     COM", "CHK-MHZ  COM"
  95. DATA "CK-ANSI  BAT", "COLRTEST COM", "CORETEST COM", "CPU-ID   COM"
  96. DATA "CPU-NDP  COM", "DIAG     COM", "DISKTEST EXE", "MAIN     MEN"
  97. DATA "AUTOTEST EXE", "DMATEST  EXE", "DRIVSPEC COM", "EQSTATUS COM"
  98. DATA "EQUIP    COM", "HD       COM", "IW-BENCH EXE", "MEMORY   EXE"
  99. DATA "MENU        ", "LS       EXE", "OTHRCOPY LZH", "PATCH    COM"
  100. DATA "PROUNLOK COM", "DISKCOPY", "TELEDISK EXE", "VIEWDISK EXE"
  101. DATA "ZORKTOOL COM", "CLONE    EXE", "COPY-U   EXE", "MARBLMAD ZIP"
  102. DATA "ZORK-ALL ARC", "BULKERAS COM", "COPYIIPC EXE", "DISKSPED BAT"
  103. DATA "NOGUARD  COM", "NOKEY    COM", "PARMS    DOC", "COPYWDOC ZIP"
  104. DATA "COPYWRIT COM", "RAMKEY   COM", "COPYWRIT", "SOLOBOOT COM"
  105. DATA "UNGUARD  COM", "ZERODISK COM", "ASMGEN   COM", "BUB-DASM LZH"
  106. DATA "DASSEMBL EXE", "DUMP     COM", "FILEDUMP COM", "DISASM"
  107. DATA "SYMDEB   EXE", "PCWATCH  COM", "PCWATCH  PRO", "PCWATCH  SYS"
  108. DATA "PCWATCH  TBL", "PCWATCHT ZIP", "PCWATCH", "UFORMAT  COM"
  109. DATA "UOPT     COM", "U-FORMAT", "UZAP     COM", "UFILE    COM"
  110. DATA "UDOCS    ZIP", "NEWEST   ZIP", "PFSWUNP  ZIP", "UNPROT"
  111. DATA "ALF19UNP ZIP", "MENU     BAT", "MENU2       ", "CPU"
  112. DATA "DISKETTE", "DRIVE", "SOFTWARE", "HARDWARE"
  113. DATA "GRAPHICS", "MONITOR", "UTILITY", "BASCOM"
  114. DATA "MICROSOF", "MIPS     COM", "PCS      COM", "TELEDISK EXE"
  115. DATA "VIEWDISK EXE", "ZORKTOOL COM", "CLONE    EXE", "COPY-U   EXE"
  116. DATA "MARBLMAD ZIP", "ZORK-ALL ARC", "BULKERAS COM", "COPYIIPC EXE"
  117. DATA "COPYIIPC", "DISKSPED BAT", "SDIR     $$$", "SPEAKER  COM"
  118. DATA "SPEED    COM", "SPINTEST COM", "SPINTIME COM", "SYS-INFO COM"
  119. DATA "SYSID    EXE", "V20TIMER COM", "VIDEOTST EXE", "XTDIAG   COM"
  120. DATA "DOSKNOWS EXE", "SCANNER  EXE", "PCBENCH  ZIP", "ANADISK  EXE"
  121. DATA "BASUPROT COM", "TELEDISK EXE", "VIEWDISK EXE", "ZORKTOOL COM"
  122. DATA "CLONE    EXE", "COPY-U   EXE", "DISKTEST EXE", "MAIN     MEN"
  123. DATA "AUTOTEST EXE", "DMATEST  EXE", "MARBLMAD ZIP", "ZORK-ALL ARC"
  124. DATA "BULKERAS COM", "COPYIIPC EXE", "DISKSPED BAT", "INT13    COM"
  125. DATA "SDIR     $$$", "BLOAD    BAS", "PRNSDIR  BAS", "AEDIT    BAT"
  126. DATA "AUTOFORM BAT", "CCOPY    BAT", "DELFILE  BAT", "FINDDATE BAT"
  127. DATA "GAME     BAT", "SETDISK  COM", "DOS", "GRAPHICS BAT"
  128. DATA "LINE     BAT", "MOUSE    BAT", "MOVE     BAT", "RAMDISK  BAT"
  129. DATA "SETPATH  BAT", "UNC-ALL  BAT", "ADATER   COM", "ALARM    COM"
  130. DATA "CHMOD    COM", "CLEAN    COM", "CS       COM", "TELEDISK EXE"
  131. DATA "VIEWDISK EXE", "ZORKTOOL COM", "CLONE    EXE", "COPY-U   EXE"
  132. DATA "MARBLMAD ZIP", "ZORK-ALL ARC", "BULKERAS COM", "COPYIIPC EXE"
  133. DATA "DISKSPED BAT", "D        COM", "DEBUG    COM", "DECIDE   COM"
  134. DATA "DEFRAG   COM", "ALTSROFF COM", "ASSIGN   COM", "BASICA   COM"
  135. DATA "BROWSE   COM", "CACHE    COM", "CHD      COM", "CHKDSK   COM"
  136. DATA "EDIT     COM", "EPSONFX  COM", "EXE2BIN  COM", "EXE2COM  COM"
  137. DATA "F11F12   COM", "FACECLOK COM", "FORMTOOL HLP", "FORMTOOL MNU"
  138. DATA "FORMTOOL", "FASTDRV  COM", "TELEDISK EXE", "VIEWDISK EXE"
  139. DATA "ZORKTOOL COM", "CLONE    EXE", "COPY-U   EXE", "MARBLMAD ZIP"
  140. DATA "ZORK-ALL ARC", "BULKERAS COM", "MAKELABL BAS", "FASTBACK"
  141. DATA "RECORD   BAS", "GAME     BAT", "GAME1    MEN", "GAME2    MEN"
  142. DATA "GAME3    MEN", "GAMES", "TUNES    MEN", "BCAT     DAT"
  143. DATA "COPYIIPC EXE", "DISKSPED BAT", "FATBACK  COM", "FILESIZE COM"
  144. DATA "FILLDISK COM", "FIND     COM", "FINDDUPE COM", "FLUSHOT  COM"
  145. DATA "FORMAT   COM", "FREERAM  COM", "GCOPY    COM", "CPU"
  146. DATA "DISKETTE", "DRIVE", "SOFTWARE", "HARDWARE"
  147. DATA "GRAPHICS", "MONITOR", "UTILITY", "BASCOM"
  148. DATA "MICROSOF", "HOLD        ", "DOC4PROG", "DIRENAME COM"
  149. DATA "DIRSIZE  COM", "DIRSORT  COM", "DISCLOCK COM", "DISKCOMP COM"
  150. DATA "DISKTYPE COM", "ED       COM", "CONVERT  DOC", "RPRN     DOC"
  151. DATA "BANNER   COM", "DTP      BAT", "BOLDL    FON", "BOLDS    FON"
  152. DATA "F        001", "FINGPANT", "HERC     FON", "WEEKLY   NEW"
  153. DATA "UNDO     CMD", "ABORT    CMD", "PASTE    CMD", "PRINT    COL"
  154. DATA "EXIT     YOU", "DELETE   THI", "UNCASH   BIL", "WEAKSEAK DEK"
  155. DATA "MINI     FON", "PAINT    BAT", "PLAINL   FON", "PLAINS   FON"
  156. DATA "ROMANL   FON", "ROMANS   FON", "MOUSE    LZH", "PIC"
  157. DATA "CFG      BAK", "FORMTOOL DAT", "FORMTOOL EXE", "FORMTOOL TBL"
  158. DATA "PC106    FNT", "PC106B   FNT", "PRNTUTIL EXE", "TBL      BAK"
  159. DATA "ALLFORMS ZIP", "FORMMADE", "BLOD2PUT COM", "FONTMOVE COM"
  160. DATA "FONTSDJ  DIC", "FONTSDJ  WID", "FONTSLJ  WID", "FONTSLW  DIC"
  161. DATA "FP       HLP", "FP", "FP       CVT", "FPPRINT  DEF"
  162. DATA "GRAB2BAS BAS", "MASTER   FNT", "MASTER   DEF", "READMAC  COM"
  163. DATA "SMOOTH   PS ", "SNAP2ART COM", "SNAPSHOT COM", "SYSTEM   FNT"
  164. DATA "UARTPAT2 PS ", "ALLPUB   ZIP", "FP-MAPS  ZIP", "PUB"
  165. DATA "GRID     PUB", "HALO     CNF", "HALOIBM  DEV", "HALOVRI  DEV"
  166. DATA "DRHALO   EXE", "GRAB     EXE", "PRESENTS EXE", "HALO"
  167. DATA "SETUP    EXE", "CENTITAL FON", "CENTMED  FON", "CURSBOLD FON"
  168. DATA "CURSIVE  FON", "F12X12   FON", "F16X16   FON", "F18X28   FON"
  169. DATA "F6X9     FON", "F8X8A    FON", "F9X14    FON", "GOTHIC   FON"
  170. DATA "GREEK    FON", "HALO201  FON", "HALO202  FON", "ITALIC   FON"
  171. DATA "ROMAN1   FON", "ROMAN2   FON", "ROMAN3   FON", "DRHALO   HLP"
  172. DATA "DISKSPED BAT", "D        COM", "DEBUG    COM", "DECIDE   COM"
  173. DATA "DEFRAG   COM", "ALTSROFF COM", "ASSIGN   COM", "BASICA   COM"
  174. DATA "BROWSE   COM", "CACHE    COM", "HALOEPSN PRN", "EXAMPLE  PIC"
  175. DATA "GOTHIC   FNT", "HP7510A  PAL", "HPG      DIR", "HPG      EXE"
  176. DATA "HARVARD", "HPG      CFG", "ITALIC1  FNT", "ITALIC2  FNT"
  177. DATA "MPS2000  PAL", "ROMAN1   FNT", "ROMAN2   FNT", "SCRIPT1  FNT"
  178. DATA "SCRIPT2  FNT", "SSERIF1  FNT", "SSERIF2  FNT", "VDI      OVL"
  179. DATA "5           ", "BARINCOM CHT", "MEATBIRD CHT", "MINCOME  CHT"
  180. DATA "MINCOME2 CHT", "GRAPH", "PIE-OW   CHT", "HPG      DIR"
  181. DATA "BORDERS1 BIC", "BORDERS1 BNM", "BORDERS1 NUM", "BREMEN   FNT"
  182. DATA "CAFE     FNT", "COMPUTER FNT", "CUSTOM   SHP", "CUSTOM   SDR"
  183. DATA "PM", "DEVILLE  FNT", "EDITOR   FNT", "EXAMINER FNT"
  184. DATA "FONTS1   FIC", "CPU", "DISKETTE", "DRIVE"
  185. DATA "SOFTWARE", "HARDWARE", "GRAPHICS", "MONITOR"
  186. DATA "UTILITY", "BASCOM", "MICROSOF", "FONTS1   FSZ"
  187. DATA "FONTS4   FNM", "FONTS4   NUM", "FONTS4   FSZ", "GAMMON   FNT"
  188. DATA "GOTHIC   FNT", "HAMPTON  FNT", "JOYCE    FNT", "LCD      FNT"
  189. DATA "MAIN     SHP", "NEWS18   FNT", "NEWS18B  FNT", "NEWS18I  FNT"
  190. DATA "OFFICE   FNT", "OSLO20B  FNT", "OSLO20BC FNT", "PARIS    FNT"
  191. DATA "PARK18   FNT", "PARK18B  FNT", "PARK18I  FNT", "PATTICON SHP"
  192. DATA "PM       EXE", "PM       PRN", "PM-IMADE ZIP", "PMAG1    SDR"
  193. DATA "PMAG1    SHP", "PMTOOLS  EXE", "PMTOOLS  DOC", "PUBDOM1  SHP"
  194. DATA "PUBDOM1  SDR", "QUILL    FNT", "RHODES   FNT", "ROMAN    FNT"
  195. DATA "SCRIBE   FNT", "SET      UP ", "SMALLCAP FNT", "STANDARD SDR"
  196. DATA "STANDARD SHP", "TRIBUNE  FNT", "TWIG     FNT", "UTOPIA   FNT"
  197. DATA "WESTERN  FNT", "ARTCON14 DOC", "TOOLS", "ARTCON14 EXE"
  198. DATA "SDIR     $$$", "B-BACKUP BAT", "COMPBACK BAT", "DAYBACK  BAT"
  199. DATA "FASTBACK COM", "FRESTORE COM", "MAKELABL BAS", "FASTBACK"
  200. DATA "RECORD   BAS", "GAME     BAT", "GAME1    MEN", "GAME2    MEN"
  201. DATA "GAME3    MEN", "DRHALO   EXE", "GRAB     EXE", "PRESENTS EXE"
  202. DATA "HALO", "SETUP    EXE", "CENTITAL FON", "CENTMED  FON"
  203. DATA "CURSBOLD FON", "CURSIVE  FON", "F12X12   FON", "GAMES"
  204. DATA "TUNES    MEN", "BCAT     DAT", "GAME1", "1KPYMID"
  205. DATA "CAT      DAT", "RND      DAT", "BO_TITLE EXE", "PYRAMID  EXE"
  206. DATA "BO_SCR   PIC", "BO_SHP   PIC", "FNT      PIC", "PYRAMID1 PIC"
  207. DATA "PYRAMID2 PIC", "PYRAMID3 PIC", "PYRAMID4 PIC", "WINNER   PIC"
  208. DATA "PYRAMID  SCR", "PYMIDDOC ZIP", "CENTPEED COM", "CENTPEED"
  209. DATA "CELL     CGA", "EAGLE", "CHAR     CGA", "ELEV     CGA"
  210. DATA "FINP     CGA", "FONT     CGA", "LOGO     CGA", "STAT     CGA"
  211. DATA "START    COM", "MAP0     DAT", "MAP1     DAT", "JOYSTICK CTP"
  212. DATA "TOPTENA  CTP", "MAPU     DAT", "MUSC     DAT", "MUSI     DAT"
  213. DATA "EAGLE    EXE", "MONOCODE 001", "MONOCODE 003", "MONOGRAF GRA"
  214. DATA "MONOPOLY", "MONOPOLY COM", "MORIA    CNF", "MORIA"
  215. DATA "JOYSTICK CTP", "TOPTENA  CTP", "MORIA    EXE", "MORIA    SCR"
  216. DATA "NATION   EXE", "NATION", "MAP         ", "BIMAGE1  DAT"
  217. DATA "BIMAGE1B DAT", "BIMAGE2  DAT", "NINJA", "BIMAGE2B DAT"
  218. DATA "FONT     DAT", "FONT2    DAT", "FONT2B   DAT", "FONTB    DAT"
  219. DATA "IMAGES   DAT", "IMAGESB  DAT", "PF       DAT", "PFB      DAT"
  220. DATA "NINJA    EXE", "NINJAX   ZIP", "BIZERK   COM", "BJTALK   COM"
  221. DATA "DRAGONS  COM", "GO-MOKU  COM", "HARDHAT  COM", "HOPPER   COM"
  222. DATA "OTHERS", "MZPACMAN COM", "OFFROAD  COM", "PACKMAN  COM"
  223. DATA "QUBERT   COM", "SMINER   COM", "SOLITARE COM", "WEEKLY   NEW"
  224. DATA "UNDO     CMD", "ABORT    CMD", "PASTE    CMD", "PRINT    COL"
  225. DATA "EXIT     YOU", "DELETE   THI", "UNCASH   BIL", "WEAKSEAK DEK"
  226. DATA "GO-MOKU  HLP", "DRAGONS  HST", "BS       SCO", "HOPPER   SCO"
  227. DATA "SMINERHS ZZZ", "PANGO    COM", "PANGO", "PANGO    HGH"
  228. DATA "HISCORE     ", "MAP      BIN", "QUAKE", "QUAKE    EXE"
  229. DATA "BOARD       ", "RISK     EXE", "RISK", "HIGHSCOR DAT"
  230. DATA "MISFAC   DAT", "STRIKER", "STRIKER  COM", "STRKLOGO DAT"
  231. DATA "STRKPARM DAT", "TUNNELS  DAT", "XONIX    BIN", "XONIX    COM"
  232. DATA "BASRUN   EXE", "XONIX", "HISCORES XNX", "TOPGUN   COM"
  233. DATA "3DEMON   COM", "3DEMON", "3-DEMON  HI1", "CASTLE   COM"
  234. DATA "CASTLE", "CASTLE   RAN", "ABM      COM", "SMGAME   COM"
  235. DATA "BABY     COM", "BEAST    COM", "CHESS1   COM", "GRAPHY   COM"
  236. DATA "JANITJOE COM", "JJ       DAT", "MAXGAME  COM", "MAXHEAD  COM"
  237. DATA "MAXHEAD2 DAT", "PITFALL  COM", "ROUND42  EXE", "SHOAX    COM"
  238. DATA "TEM-INS  EXE", "TEMPLE   EXE", "TNUKE    COM", "UNO      COM"
  239. DATA "READMAC  COM", "GIFMAC", "ALLMAC   ZIP", "GREY     LZH"
  240. DATA "ASTRO    COM", "EM       COM", "INVADERS COM", "LOCKERS"
  241. DATA "OTHERS", "PARATROP COM", "TIMING   COM", "PIANOMAN LZH"
  242. DATA "PIANO", "CHACONNE COM", "CMINOR   COM", "TUNES"
  243. DATA "ENTERTAN COM", "FESTBERG COM", "INVENTN4 COM", "JBOND    COM"
  244. DATA "PYTHON   COM", "QNAVEE   COM", "REDROSE  COM", "RKTYTKTY COM"
  245. DATA "SYNCLOCK COM", "TURKISH  COM", "TVTUNE   COM", "WACHTAUF COM"
  246. DATA "WILLOW   COM", "WILLTELL COM", "PLAY     DAT", "MAGIC    COM"
  247. DATA "MASTER   COM", "PINBALL", "TOMATO   COM", "TWILZONE COM"
  248. DATA "APRIL    COM", "BACKTALK COM", "BUG      COM", "DECEIVE  COM"
  249. DATA "DRAIN    COM", "PRANK", "DRIP     COM", "DUMB     COM"
  250. DATA "EYE      COM", "FAKE123  COM", "FIX      COM", "FLIP     COM"
  251. DATA "FUNNYDOS EXE", "HELPME   COM", "HOTBOOT  COM", "MAC      COM"
  252. DATA "MRORGAN  COM", "QQ       EXE", "ATITDOC  ZIP", "COVER    SCR"
  253. DATA "INST0    SCR", "INST1    SCR", "SCR0     SCR", "SCR4     SCR"
  254. DATA "PARTS    BAS", "N1       IMG", "N3       IMG", "TEXTSTUF ZIP"
  255. DATA "TEXTFILE", "CRYPTOR  ZIP", "DOCMAKER TXT", "DOCMAKER COM"
  256. DATA "MIND     COM", "POLSCALE COM", "TIMEDON  FRM", "HOLDTANK"
  257. DATA "DAZZLER  COM", "MSG1        ", "OTHRHOLD LZH", "3DMENU   ZIP"
  258. DATA "BACKDATA BAT", "MAINDATA DAT", "MBASE", "MAINDATA EXE"
  259. DATA "MBASE    EXE", "PRNTDATA EXE", "MAINDATA KEY", "FRAMTEL  BAS"
  260. DATA "FRAMTEL  BAT", "BUSINESS TEL", "RICHLAND TEL", "PHONE"
  261. DATA "FRIEND   TEL", "1RECORD     ", "FINDALL  BAS", "HIGHNUMB BAS"
  262. DATA "FINDALL  COM", "TESTDATA ZIP", "DEMO     ZZZ", "TOOLS"
  263. DATA "AUTODDC  ASP", "CHKSUM   COM", "CRC      COM", "CRC2     COM"
  264. DATA "DSZ      COM", "GO       BAT", "PCPLUS   KEY", "PCPLUS   PRM"
  265. DATA "MODEM", "PCSETUP  EXE", "PROCOMM  DIR", "PROZ     COM"
  266. DATA "ALSCREEN ZIP", "LEN      DOC", "LEN2     DOC", "SCREENS"
  267. DATA "NPAD     COM", "TINYPRT  COM", "PD       COM", "PRNAPPL  LZH"
  268. DATA "PRTFONT  ARC", "SDIR     $$$", "CONTROL", "SIDEWAYS COM"
  269. DATA "TSR      LZH", "BOXLABEL COM", "COVER    COM", "LAB-DOC  ZIP"
  270. DATA "LBL      COM", "LBL35V1  EXE", "LABEL", "STARLAB  EXE"
  271. DATA "RETLABEL DAT", "ADDLABEL DAT", "PROGRAM  BAT", "A86STUFF LZH"
  272. DATA "A86", "DOSBAS   ZIP", "JUSTBASC", "BIGPROGS"
  273. DATA "MICKEY   BAS", "CALENDAR BAS", "CHECKERS BAS", "CLOCK    BAS"
  274. DATA "COMPAT   BAS", "GRAPHIT  BAS", "HANGMAN  BAS", "ELECTION BAS"
  275. DATA "MATCHIT  BAS", "WEEKLY   NEW", "UNDO     CMD", "ABORT    CMD"
  276. DATA "PASTE    CMD", "PRINT    COL", "EXIT     YOU", "DELETE   THI"
  277. DATA "UNCASH   BIL", "WEAKSEAK DEK", "MENU     BAS", "ORGAN    BAS"
  278. DATA "TICTAC   BAS", "PCWORM2  BAS", "CARWARS  BAS", "PCWORM   BAS"
  279. DATA "NOTES    BAS", "ZAPEM    BAS", "PUZZLE   BAS", "READ-BAS COM"
  280. DATA "BAS2FORT ZIP", "LINK     EXE", "MASM     EXE", "PROGLANG"
  281. DATA "MASM", "ALLASM   ZIP", "SOURCE.COD", "BOOK-ASM ZIP"
  282. DATA "GMAKE    COM", "MOUSE", "GMAKE1   EXE", "LOTUS    GMK"
  283. DATA "MENUS", "LOTUS    MNU", "POP-UP   GMK", "POP-UP   MNU"
  284. DATA "TXT2PAS  COM", "TP       BAT", "TURBO    COM", "PASCAL"
  285. DATA "CUBE     PAS", "T2C      ZIP", "MS-T2C", "EXAMPLES ZIP"
  286. DATA "PAS-SOUR ZIP", "SOURCE.COD", "TINST    MSG", "TINST    DTA"
  287. DATA "TURBO    MSG", "TURBO.MSG", "ASM2PAS  COM", "SCAN     EXE"
  288. DATA "PCMAC    ASM", "COMPILE  BAT", "TXT2C    COM", "POWERC"
  289. DATA "MIX      EXE", "PC       EXE", "PCL      EXE", "PCO      EXE"
  290. DATA "ALLOC    H  ", "ASSERT   H  ", "BIOS     H  ", "CONIO    H  "
  291. DATA "CTYPE    H  ", "DIR      H  ", "DIRECT   H  ", "DOS      H  "
  292. DATA "ERRNO    H  ", "MERGE    EXE", "COMPILED", "WORKS    ZIP"
  293. DATA "LOCKING  H  ", "STAT     H  ", "TIMEB    H  ", "SYS"
  294. DATA "TYPES    H  ", "UTIME    H  ", "C-FILES  ZIP", "QSORT    C  "
  295. DATA "HOLD", "QSORT    EXE", "GETPARM  EXE", "GETAKEY  EXE"
  296. DATA "GETAKEY  C  ", "CCLS     C  ", "CCLS     EXE", "CHILD    C  "
  297. DATA "WORKSOK", "QSORT    C  ", "SHELL    C  ", "BARCHART C  "
  298. DATA "PIECHART EXE", "Q        BAT", "BC       EXE", "LIB      EXE"
  299. DATA "QB", "LINK     EXE", "QB       EXE", "MYLIB    HED",
  300. DATA "QB       HLP", "QB       INI", "NOCOM    OBJ", "NOEM     OBJ"
  301. DATA "QB       PIF", "INTRPT   QLB", "MYLIB    QLB", "MASSSORT BAS"
  302. DATA "MAINDATA DAT", "RIPLSORT BAS", "1000RECS    ", "DATA     BAS"
  303. DATA "HEX2BIN  COM", "MISCBOOK ZIP", "QSORT2   SUB", "BOOK"
  304. DATA "COOLGRID SUB", "CKDSKSPC SUB", "LOADPIC  ZIP", "MISCSUBS ZIP"
  305. DATA "HOLDSTUF ZIP", "PCSPELL  LZH", "HOLDTANK", "LIBDEMO  BAS"
  306. DATA "WARMBOOT BAT", "FONT     BAS", "BCOM40   LIB", "BQLB40   LIB"
  307. DATA "BRUN40   LIB", "INTRPT   LIB", "LIB", "MYLIB    LIB"
  308. DATA "ADVBAS   LIB", "OBJECT   ARC", "ADDLINE# COM", "BAS2C    LZH"
  309. DATA "BAS2SB   COM", "BLOD2PUT COM", "CAPTURE  DOC", "CAPTURE  COM"
  310. DATA "GRAB2BAS BAS", "GRID     COM", "HELP     DOC", "HELP     COM"
  311. DATA "OPTCALL  LZH", "PRNTSUBS COM", "QBUTIL40 EXE", "QLBDUMP  COM"
  312. DATA "REMLINE  COM", "SDIR     $$$", "UNCOMGEN BAS", "SOURCE   ZIP"
  313. DATA "MYERS    DAT", "PLOTTER  BAS", "BAR      BAS", "DBASELOC    "
  314. DATA "MBASE", "FIELD       ", "DATA     BAS", "EXAMDATA BAS"
  315. DATA "FIXMDATA BAS", "HIGHNUMB BAS", "MAINDATA BAS", "MBASE    BAS"
  316. DATA "PRNTDATA BAS", "MAINDATA DAT", "PRNTDATA QBO", "PROGRUN  XXX"
  317. DATA "MBASESRC ZIP", "MWSORT   BAS", "MWSORT   EXE", "MWSORT2  EXE"
  318. DATA "MWSORT   TBO", "SORTS", "PROGRUN  XXX", "MWSORT   BAS"
  319. DATA "MAINDATA DAT", "MWSORT   EXE", "TB       EXE", "TBCONFIG TB "
  320. DATA "TBHELP   TBH", "ADVBAS   QLB", "ADVTEST  BAS", "ADVBAS"
  321. DATA "BUBBLEST BAS", "CSORT    QB4", "CSORT    BAS", "MNTSORT  LZH"
  322. DATA "MWMSORT  BAS", "MWSORT   QB4", "MWSSRT   COM", "RIPLSORT BAS"
  323. DATA "SPLITSRT BAS", "SPLIT2ST BAS", "DEFAULT     ", "FIXQP    BAS"
  324. DATA "HDEFAULT    ", "QP       BAT", "QPRLDB   OV2", "QUIKPRO"
  325. DATA "QPRLDB   SRT", "QUIKDOC3    ", "QUIKDOK     ", "QUIKMENU    "
  326. DATA "QUIKPRO5    ", "QUIKPRT4    ", "QXDOC3      ", "RANDPRT     "
  327. DATA "RANDWRT     ", "PHONEY   FIL", "FAKE     FIL", "JOKE     THN"
  328. DATA "ANOTHER  FIL", "MAKETHIS UP", "EXTRA    DAT", "MONEY4   NIL"
  329. DATA "EXTRA    CAS", "FREEWARE XXX", "XXX      FRE", "GMWELCH  FIL"
  330. DATA "ANOTHER  TWO", "WEEKLY   NEW", "UNDO     CMD", "ABORT    CMD"
  331. DATA "PASTE    CMD", "PRINT    COL", "EXIT     YOU", "DELETE   THI"
  332. DATA "UNCASH   BIL", "WEAKSEAK DEK", "MEEKLEAK FEK", "ONLYYOU  SMO"
  333. DATA "ADEREKFX DFJ", "EIRIELFK FEL", "FELDKFIE DFO", "FLDFIKSI LFE"
  334. DATA "LSDFIOER KDP", "LIREEICX DME", "EEEMEEME FEO", "FIRELFDD ERE"
  335.  
  336. SUB XSort (Ar$(), Arn%, XSrTime!)
  337.  
  338. '    COPYRIGHT *c* 1989, Mike Shaffer - ALL RIGHTS RESERVED WORLDWIDE
  339. '    AUTHOR GRANTS RIGHTS TO USE FREELY PROVIDED THIS COPYRIGHT NOTICE
  340. '    IS INCLUDED
  341. '
  342. '
  343. '       SUB:            XSORT
  344. '       AUTHOR:         Mike Shaffer (for Michael Welch)
  345. '       CREATION DATE:  27-June-89
  346. '       VERSION:        2.1
  347. '       LAST REVISION:  30-June-89 by Michael Welch
  348. '       REVISION HIST.: After receiving the XSORT algorithm, Mike Welch
  349. '                       spent approximately 7 hours reformatting the code
  350. '                       such that abides by the rules of modular
  351. '                       programming (i.e., "top-down" method).  This
  352. '                       process involved rearranging the source code and
  353. '                       removing the 13 or so GOTO statements and line
  354. '                       labels.  Note that doing so also slowed the sort
  355. '                       down a slight amount as the DO-LOOP statements
  356. '                       take QuickBASIC longer to execute.  If about an
  357. '                       extra 10 seconds per 1000 sorted arrays is not worth
  358. '                       the modular style, stick to Mike Shaffer's ver. 2.0.
  359. '                       Note that the RIPLSORT file is a modification of the
  360. '                       actual MNTSORT and is copyright by Mike Welch of 
  361. '                       Dallas.  But, on this sort, RIPLSOR2, a modification of
  362. '                       Mike Shaffer's (Dallas) sort, Mike Shaffer has all
  363. '                       of the copyrights.
  364. '       PURPOSE:        This SUB will accept a string array and
  365. '                       sort it. The same string array is returned
  366. '                       in sorted order. This program is based
  367. '                       on a modified ripple sort algorithm
  368. '                       originally written by Richard Ashwell III.
  369. '                       Through judicious use of better QB
  370. '                       programming methods, I was able to speed
  371. '                       his program up by a factor of nearly 10
  372. '                       (e.g. to sort 2000 records, Quicksort
  373. '                       takes about 2.5 minutes, MNTSORT takes 46.25
  374. '                       seconds, while MWSSORT took 1.45 seconds!)
  375. '
  376. '       PASSED:         Ar$()           => String array to be sorted
  377. '                       Arn%            => Number of elements to sort
  378. '       RETURNS:        XSRTIME!        => Time it took to sort
  379. '                       Ar$()           => in modified order
  380. '                       Arn%            => will be trashed
  381. '
  382. '       CALLING CONV:   [CALL] XSORT [(] Ar$(), arn%, XSRTIME! [)]
  383. '
  384. '
  385. '       MISC NOTES:     plane% and wave% should be dimensioned to the
  386. '                       same number of elements contained in Ar (or
  387. '                       more). This is currently set up for a max of
  388. '                       2,000 entries.
  389. '
  390. '
  391.         
  392. '
  393. DIM Plane%(0 TO 2000), Wave%(0 TO 2000)
  394.  
  395. STime! = TIMER                       'Get start time
  396.  
  397. DReg% = 1                            ' \
  398. Plane%(DReg%) = 1                    '  \ Initialize program's
  399. Wave%(DReg%) = Arn%                  '  /   work variables
  400. Ereg% = 1                            ' /
  401. AReg% = Arn%                         '/
  402.  
  403. DO
  404.     EndLoop = FALSE%
  405.     Begin = FALSE%
  406.     DO WHILE (AReg% - Ereg%) > 8
  407.         BReg% = Ereg%: CReg% = AReg%
  408.         DO
  409.             IF Ar$(BReg%) > Ar$(CReg%) THEN
  410.                 Flag2 = FALSE%
  411.                 SWAP Ar$(CReg%), Ar$(BReg%)
  412.                 DO
  413.                     IF Ar$(CReg%) < Ar$(BReg%) THEN
  414.                         SWAP Ar$(CReg%), Ar$(BReg%)
  415.                         CReg% = CReg% - 1
  416.                         Flag2 = TRUE%
  417.                         EXIT DO
  418.                     END IF
  419.                     BReg% = BReg% + 1
  420.                 LOOP WHILE CReg% > BReg%
  421.                 CReg% = CReg% + 1
  422.                 Flag1 = FALSE%
  423.                 IF Flag2 = FALSE% THEN EXIT DO
  424.             END IF
  425.         CReg% = CReg% - 1
  426.         LOOP WHILE CReg% > BReg%
  427.         IF Flag1 = TRUE% THEN CReg% = CReg% + 1
  428.         Flag1 = TRUE%
  429.         DReg% = DReg% + 1
  430.         IF (BReg% - Ereg%) < (AReg% - CReg%) THEN
  431.             Plane%(DReg%) = CReg%
  432.             Wave%(DReg%) = AReg%
  433.             AReg% = BReg%
  434.             Begin = TRUE%
  435.             EXIT DO
  436.         END IF
  437.         Plane%(DReg%) = Ereg%
  438.         Wave%(DReg%) = BReg%
  439.         Ereg% = CReg%
  440.         Begin = TRUE%
  441.         EXIT DO
  442.     LOOP
  443.     IF Begin = FALSE% THEN
  444.         IF NOT (AReg% - Ereg% + 1) = 1 THEN
  445.             FOR BReg% = (Ereg% + 1) TO AReg%
  446.                 FOR CReg% = Ereg% TO (BReg% - 1)
  447.                     Freg% = BReg% - CReg% + Ereg% - 1
  448.                     IF Ar$(Freg%) <= Ar$(Freg% + 1) THEN
  449.                         EXIT FOR
  450.                     ELSE
  451.                         SWAP Ar$(Freg%), Ar$(Freg% + 1) ' Swap elements
  452.                     END IF
  453.                 NEXT CReg%
  454.             NEXT BReg%
  455.         END IF
  456.         Ereg% = Plane%(DReg%)
  457.         AReg% = Wave%(DReg%)
  458.         DReg% = DReg% - 1
  459.         IF DReg% = 0 THEN
  460.             EndLoop = TRUE%
  461.         END IF
  462.     END IF
  463. LOOP UNTIL EndLoop = TRUE%
  464.  
  465. Etime! = TIMER
  466. XSrTime! = Etime! - STime!
  467.  
  468. END SUB
  469.  
  470.