Another sort routine

[Autolink] Menu

I don't know the type of this sort algortihm.
Captured from a message from Rony Flatscher in a public Internet news group (see Internet - Newsgroups)

 
/* ------------------------------------------------------------------ */
/* function: sort routine                                             */
/*                                                                    */
/* call:     sort                                                     */
/*                                                                    */
/* returns:  nothing                                                  */
/*                                                                    */
/* notes:    You must save the elements to sort in the stem "STEM."   */
/*           stem.0 must contain the number of elements in the stem.  */
/*                                                                    */
/* reference: Knuth, "Algorithms"                                     */
/*                                                                    */
Sort: PROCEDURE EXPOSE stem.

                        /* define M for passes                        */
  M = 1
  do while (9 * M + 4) < stem.0
     M = M * 3 + 1
  end /* do while */

                        /* sort stem                                  */
  do while M > 0
     K = stem.0 - M
     do J = 1 to K
        Q = J
        do while Q > 0
           L = Q + M

           if stem.Q <<= stem.L then
             leave

                       /* switch elements                            */
           tmp      = stem.Q
           stem.Q = stem.L
           stem.L = tmp
           Q = Q - M
        end /* do while Q > 0 */
     end /* do J = 1 to K */
     M = M % 3
  end /* while M > 0 */
RETURN


[Back: Shellsort routine - 2 -]
[Next: Mathematical routines]