[comp.sys.mac.programmer] Comparing Gish's Heap sort, fastQsort and a few others.

huntley@copper.ucs.indiana.edu (Haydn Huntley) (09/30/90)

Mac IIcx, sorting 1024 long integers, compiled with Think C 4.0.1

median FMR quick sort --         random list --  0.241 secs --   10455 compares
median FMR quick sort --    semi-random list --  0.231 secs --   10255 compares
median FMR quick sort --        ordered list --  0.118 secs --    8293 compares
median FMR quick sort --        reverse list --  0.218 secs --   10082 compares
median FMR quick sort --  almost sorted list --  0.198 secs --    9417 compares
                                   BEST CASE --  0.118 secs --    8293 compares
                                  WORST CASE --  0.241 secs --   10455 compares
                                     AVERAGE --  0.201 secs --    9700 compares

median FRR quick sort --         random list --  0.245 secs --   10913 compares
median FRR quick sort --    semi-random list --  0.235 secs --   10603 compares
median FRR quick sort --        ordered list --  0.139 secs --    9790 compares
median FRR quick sort --        reverse list --  0.210 secs --   10361 compares
median FRR quick sort --  almost sorted list --  0.206 secs --   10467 compares
                                   BEST CASE --  0.139 secs --    9790 compares
                                  WORST CASE --  0.245 secs --   10913 compares
                                     AVERAGE --  0.207 secs --   10426 compares

median MRR quick sort --         random list --  0.262 secs --   11458 compares
median MRR quick sort --    semi-random list --  0.236 secs --   10324 compares
median MRR quick sort --        ordered list --  0.136 secs --    8870 compares
median MRR quick sort --        reverse list --  0.221 secs --    9752 compares
median MRR quick sort --  almost sorted list --  0.194 secs --    9408 compares
                                   BEST CASE --  0.136 secs --    8870 compares
                                  WORST CASE --  0.262 secs --   11458 compares
                                     AVERAGE --  0.210 secs --    9962 compares

    random quick sort --         random list --  0.265 secs --   11759 compares
    random quick sort --    semi-random list --  0.249 secs --   11343 compares
    random quick sort --        ordered list --  0.132 secs --    9528 compares
    random quick sort --        reverse list --  0.231 secs --   10260 compares
    random quick sort --  almost sorted list --  0.203 secs --   10725 compares
                                   BEST CASE --  0.132 secs --    9528 compares
                                  WORST CASE --  0.265 secs --   11759 compares
                                     AVERAGE --  0.216 secs --   10723 compares

            fastQsort --         random list --  0.267 secs --   11661 compares
            fastQsort --    semi-random list --  0.250 secs --   11047 compares
            fastQsort --        ordered list --  0.226 secs --   10730 compares
            fastQsort --        reverse list --  0.244 secs --   11309 compares
            fastQsort --  almost sorted list --  0.231 secs --   11038 compares
                                   BEST CASE --  0.226 secs --   10730 compares
                                  WORST CASE --  0.267 secs --   11661 compares
                                     AVERAGE --  0.244 secs --   11157 compares

median RRR quick sort --         random list --  0.268 secs --   11094 compares
median RRR quick sort --    semi-random list --  0.258 secs --   10882 compares
median RRR quick sort --        ordered list --  0.132 secs --    8841 compares
median RRR quick sort --        reverse list --  0.216 secs --    9755 compares
median RRR quick sort --  almost sorted list --  0.197 secs --    9400 compares
                                   BEST CASE --  0.132 secs --    8841 compares
                                  WORST CASE --  0.268 secs --   11094 compares
                                     AVERAGE --  0.214 secs --    9994 compares

 modified THINK qsort --         random list --  0.272 secs --   11734 compares
 modified THINK qsort --    semi-random list --  0.259 secs --   11189 compares
 modified THINK qsort --        ordered list --  0.232 secs --   10878 compares
 modified THINK qsort --        reverse list --  0.254 secs --   11742 compares
 modified THINK qsort --  almost sorted list --  0.238 secs --   11197 compares
                                   BEST CASE --  0.232 secs --   10878 compares
                                  WORST CASE --  0.272 secs --   11742 compares
                                     AVERAGE --  0.251 secs --   11348 compares

           shell sort --         random list --  0.325 secs --   13853 compares
           shell sort --    semi-random list --  0.317 secs --   13854 compares
           shell sort --        ordered list --  0.083 secs --    5601 compares
           shell sort --        reverse list --  0.199 secs --    9175 compares
           shell sort --  almost sorted list --  0.223 secs --   10649 compares
                                   BEST CASE --  0.083 secs --    5601 compares
                                  WORST CASE --  0.325 secs --   13854 compares
                                     AVERAGE --  0.229 secs --   10626 compares

           merge sort --         random list --  0.389 secs --    8974 compares
           merge sort --    semi-random list --  0.359 secs --    8880 compares
           merge sort --        ordered list --  0.286 secs --    5120 compares
           merge sort --        reverse list --  0.283 secs --    5120 compares
           merge sort --  almost sorted list --  0.339 secs --    7862 compares
                                   BEST CASE --  0.283 secs --    5120 compares
                                  WORST CASE --  0.389 secs --    8974 compares
                                     AVERAGE --  0.331 secs --    7191 compares

     Gish's heap sort --         random list --  0.506 secs --   17420 compares
     Gish's heap sort --    semi-random list --  0.504 secs --   17549 compares
     Gish's heap sort --        ordered list --  0.526 secs --   18060 compares
     Gish's heap sort --        reverse list --  0.466 secs --   16407 compares
     Gish's heap sort --  almost sorted list --  0.523 secs --   17962 compares
                                   BEST CASE --  0.466 secs --   16407 compares
                                  WORST CASE --  0.526 secs --   18060 compares
                                     AVERAGE --  0.505 secs --   17479 compares

            heap sort --         random list --  0.624 secs --   17420 compares
            heap sort --    semi-random list --  0.631 secs --   17549 compares
            heap sort --        ordered list --  0.648 secs --   18060 compares
            heap sort --        reverse list --  0.579 secs --   16407 compares
            heap sort --  almost sorted list --  0.647 secs --   17962 compares
                                   BEST CASE --  0.579 secs --   16407 compares
                                  WORST CASE --  0.648 secs --   18060 compares
                                     AVERAGE --  0.626 secs --   17479 compares

median FML quick sort --         random list --  0.239 secs --   10506 compares
median FML quick sort --    semi-random list --  0.219 secs --   10054 compares
median FML quick sort --        ordered list --  0.106 secs --    7559 compares
median FML quick sort --        reverse list --  1.182 secs --   89054 compares
median FML quick sort --  almost sorted list --  0.215 secs --   12265 compares
                                   BEST CASE --  0.106 secs --    7559 compares
                                  WORST CASE --  1.182 secs --   89054 compares
                                     AVERAGE --  0.392 secs --   25887 compares

     naive quick sort --         random list --  0.274 secs --   12447 compares
     naive quick sort --    semi-random list --  0.260 secs --   12095 compares
     naive quick sort --        ordered list --  6.006 secs --  523098 compares
     naive quick sort --        reverse list --  6.584 secs --  523197 compares
     naive quick sort --  almost sorted list --  0.311 secs --   20180 compares
                                   BEST CASE --  0.260 secs --   12095 compares
                                  WORST CASE --  6.584 secs --  523197 compares
                                     AVERAGE --  2.687 secs --  218203 compares

        THINK's qsort --         random list --  0.887 secs --   13674 compares
        THINK's qsort --    semi-random list --  0.982 secs --   15960 compares
        THINK's qsort --        ordered list -- 29.502 secs --  524799 compares
        THINK's qsort --        reverse list -- 28.910 secs --  524799 compares
        THINK's qsort --  almost sorted list --  2.906 secs --   51698 compares
                                   BEST CASE --  0.887 secs --   13674 compares
                                  WORST CASE -- 29.502 secs --  524799 compares
                                     AVERAGE -- 12.637 secs --  226186 compares

       insertion sort --         random list --  3.648 secs --  235252 compares
       insertion sort --    semi-random list --  2.687 secs --  177063 compares
       insertion sort --        ordered list --  0.039 secs --    1023 compares
       insertion sort --        reverse list --  8.092 secs --  523776 compares
       insertion sort --  almost sorted list --  0.582 secs --   36994 compares
                                   BEST CASE --  0.039 secs --    1023 compares
                                  WORST CASE --  8.092 secs --  523776 compares
                                     AVERAGE --  3.010 secs --  194821 compares

          bubble sort --         random list -- 11.288 secs --  522065 compares
          bubble sort --    semi-random list -- 10.342 secs --  521760 compares
          bubble sort --        ordered list --  0.014 secs --    1023 compares
          bubble sort --        reverse list -- 16.043 secs --  523776 compares
          bubble sort --  almost sorted list --  7.983 secs --  516273 compares
                                   BEST CASE --  0.014 secs --    1023 compares
                                  WORST CASE -- 16.043 secs --  523776 compares
                                     AVERAGE --  9.134 secs --  416979 compares

Done.

FMR stands for First, Middle, Random (choosing the median of the three).
FML stands for First, Middle, Last, and RRR stands for Random, Random, and
Random, etc.

Gish's Heap sort does a lot better than the one I wrote.  His has the
code for swapMem coded inline -- I think I'll try that on the other 
algorithms when I get some time.  Heap sort is iterative and doesn't
require much extra stack space.

The variations on the Quick sort algorithm are substantially faster,
though they may require some stack space because they are recursive.
These have been coded to use a maximum of log(n) stack space.

Shell sort is the fastest iterative algorithm I tested.

The semi-random data is about 2/3 randomized, and the almost sorted data is 
only about 10% randomized.  If you'd like to peruse the source code, it's 
available for the asking.  If you have a good sorting algorithm you think 
I might be interested in, send it to:  huntley@copper.ucs.indiana.edu

--Haydn Huntley
;;  *****************************************************
;;  *  Haydn Huntley    huntley@copper.ucs.indiana.edu  *
;;  *****************************************************