BBS: Inland Empire Archive Date: 10-24-92 (07:14) Number: 373 From: JERRY ALDRICH Refer#: NONE To: RYAN WELLMAN Recvd: NO Subj: Re: Fast Sorting Algorith Conf: (2) Quik_Bas
(* On or about 22 Oct 92 14:36:00, in a message to All, *) (* Ryan Wellman blurted out the following: *) RW> Hello, RW> This is a sort routine that I just wrote. It is extremely fast. RW> It will sort an array with 16,383 random entries in 7.5 seconds on a RW> 386/40. I would like to see your comments/modifications, and I would RW> like to see if this routine is currently the fastest one in existance. RW> I warn you, if it is I'll be gloating. It's also fully comented so that RW> you won't have many problemes figuring out what I'm doing. Well, I though I had you beat :) The test I ran was on a 386SX/16 using PDS 7.1 and the QBX environment. The only modification I made to your routine was to strip out the comment lines. Here are the results when running in the environment: FastSort: .0585 MySort: .0605 based on 64 entries. FastSort: .1699 MySort: .2207 based on 128 entries. FastSort: .5996 MySort: .5507 based on 256 entries. FastSort: 1.269 MySort: 1.208 based on 512 entries. FastSort: 3.900 MySort: 3.679 based on 1024 entries. FastSort: 8.679 MySort: 8.191 based on 2048 entries. FastSort: 21.58 MySort: 20.11 based on 4096 entries. FastSort: 74.31 MySort: 67.83 based on 8192 entries. FastSort: 168.4 MySort: 153.4 based on 16384 entries. At this point, I was pretty pleased with myself. However, just for fairness, I decided to compile the thing and try it again. Here are the results when compiled: FastSort: 00000 MySort: 00000 based on 64 entries. FastSort: .0488 MySort: .0605 based on 128 entries. FastSort: .0605 MySort: .0507 based on 256 entries. FastSort: .1093 MySort: .1699 based on 512 entries. FastSort: .4902 MySort: .6093 based on 1024 entries. FastSort: 1.160 MySort: 1.259 based on 2048 entries. FastSort: 2.800 MySort: 3.240 based on 4096 entries. FastSort: 9.781 MySort: 11.15 based on 8192 entries. FastSort: 22.12 MySort: 25.32 based on 16384 entries. It a WHOPPING improvement for both routines in speed, but that's to be expected. Much to my dismay, your routine was faster <Sigh>. Now, explain why there is a difference! Here's the routine I used: DEFINT A-Z SUB MySort (InArray() AS INTEGER, Lower AS INTEGER, Upper AS INTEGER) Span = Upper \ 2 DO WHILE (Span > 0) FOR I = Span TO Upper - 1 FOR j = (I - Span + 1) TO 1 STEP -Span IF InArray(j) <= InArray(j + Span) THEN EXIT FOR SWAP InArray(j), InArray(j + Span) NEXT j NEXT I Span = Span \ 2 LOOP END SUB Although yours seems to be faster, my simpler and smaller :) Later! Jerry --- Renegade v8-27 Beta * Origin: The Bumpkinland BBS - "Home of BLand Software" (1:296/3)
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