From: Kbwms AT aol DOT com Message-ID: <28cd0c52.35fee03f@aol.com> Date: Tue, 15 Sep 1998 17:46:39 EDT To: djgpp AT delorie DOT com Cc: Eli Zaretskii Mime-Version: 1.0 Subject: Much Improved Version of qsort Content-type: multipart/mixed; boundary="part0_905895999_boundary" Precedence: bulk This is a multi-part message in MIME format. --part0_905895999_boundary Content-ID: <0_905895999 AT inet_out DOT mail DOT aol DOT com DOT 1> Content-type: text/plain; charset=US-ASCII Dear DJ Delorie, I have finished work on a new version of qsort that is substantially better that the current version in our library. To show that this is so, I append to this letter the results of two test runs. The first shows the results of the current qsort, the second on the new version. Each test run consists of two passes on the test program. Each pass calls qsort 10 times to sort a different kind of sort target on each call. On the first pass, each sort target consists of 20,000 items. On the second pass, each sort target consists of 40,000 items. As can be seen in the timing figures, our current version of qsort demonstrates quadratic timing behavior on two of the sort targets. These sort targets are the last two in the list. As you can see, the numbers of comparisons are virtually quadrupled on targets that are double the size. Similar runs are shown for the new version of qsort. As you can see, the numbers of comparisons are much smaller for the targets at issue. No such quadratic timing behavior is demonstrated. Total sort time for the current version of qsort: 287.74 secs. Total sort time for the new version of qsort: 3.35 secs. Attached to this letter is a zip file that contains the following files: 1. fqsort.c - the new fat-pivot version of qsort. 2. lqsort.c - the current library version of qsort. This version has hooks inserted to count swaps. 3. tstsort.c - a test driver for any sort function that has a qsort-like calling protocol. 4. a header file, tsrtdefs.h, and five C-source files, with extension .cin, that are included by tstsort.c. 5. a makefile 6. two result files identical to the stuff that is appended to this letter - fqsort.out and lqsort.out. The source files are herewith released to you. K.B. Williams ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Generating Targets in [20000 (20000) 40000] Sort Function is Standard Library Qsort PlotTimer Option is FALSE Items Comparisons Exchanges Code/Target I.D. 20000 315228 77650 (R) Random-Uniform 270865 0 (S) Already-Sorted 270866 10000 (V) Reverse-Sorted 900881 83589 (H) Reverse-Sorted-by-Halves 477073 19998 (F) First-Item-Out-of-Order 272199 6666 (T) Every-Third-Item-Inverted 270865 0 (Q) All-Items-Equal 281338 10629 (E) Every-Eighth-Item-Different 100050088 10195 (A) Alternating-Pairs 51016508 19662 (B) Bore-Sight-Simulation Suite Stats: 20000 Items/Target, 58.131868 Seconds 154125911 Comparisons, 238389 Exchanges Items Comparisons Exchanges Code/Target I.D. 40000 689461 169508 (R) Random-Uniform 581714 0 (S) Already-Sorted 581715 20000 (V) Reverse-Sorted 2043983 177877 (H) Reverse-Sorted-by-Halves 1034071 39998 (F) First-Item-Out-of-Order 584387 13333 (T) Every-Third-Item-Inverted 581714 0 (Q) All-Items-Equal 603311 22460 (E) Every-Eighth-Item-Different 400120590 20398 (A) Alternating-Pairs 198488228 38612 (B) Bore-Sight-Simulation Suite Stats: 40000 Items/Target, 229.505495 Seconds 605309174 Comparisons, 502186 Exchanges Total Sort Time: 0 Hrs, 4 Mins, 47.74 Secs ======================================================================== Generating Targets in [20000 (20000) 40000] Sort Function is FatQsort(Median Pvt) PlotTimer Option is FALSE Items Comparisons Exchanges Code/Target I.D. 20000 313077 81837 (R) Random-Uniform 240010 4094 (S) Already-Sorted 260621 29998 (V) Reverse-Sorted 271539 83970 (H) Reverse-Sorted-by-Halves 260620 19998 (F) First-Item-Out-of-Order 252503 30602 (T) Every-Third-Item-Inverted 20003 1 (Q) All-Items-Equal 64460 9927 (E) Every-Eighth-Item-Different 30005 5003 (A) Alternating-Pairs 26615 6082 (B) Bore-Sight-Simulation Suite Stats: 20000 Items/Target, 1.043956 Seconds 1739453 Comparisons, 271512 Exchanges Items Comparisons Exchanges Code/Target I.D. 40000 661261 173685 (R) Random-Uniform 520011 8190 (S) Already-Sorted 561233 59998 (V) Reverse-Sorted 585485 178978 (H) Reverse-Sorted-by-Halves 561232 39998 (F) First-Item-Out-of-Order 544413 53404 (T) Every-Third-Item-Inverted 40003 1 (Q) All-Items-Equal 134495 21056 (E) Every-Eighth-Item-Different 60005 10003 (A) Alternating-Pairs 53077 11971 (B) Bore-Sight-Simulation Suite Stats: 40000 Items/Target, 2.197802 Seconds 3721215 Comparisons, 557284 Exchanges Total Sort Time: 0 Hrs, 0 Mins, 3.35 Secs --part0_905895999_boundary Content-ID: <0_905895999 AT inet_out DOT mail DOT aol DOT com DOT 2> Content-type: application/zip; name="TSTQSORT.ZIP" Content-transfer-encoding: base64 Content-disposition: inline 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 --part0_905895999_boundary--