Re: Fast Sorting Algorith

 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)
Outer Court
Echo Basic Postings

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