Heapsort routine

[Autolink] Menu

This is a Heap-Sortroutine
Captured from a message from Dirk Terrell (see EMail Addresses) in a public Internet news group (see Internet - Newsgroups)

 
/* ------------------------------------------------------------------ */
/* function: heap sort routine                                        */
/*                                                                    */
/* call:     HeapSort                                                 */
/*                                                                    */
/* 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: Sedgewick, "Algorithms"                                 */
/*                                                                    */
Heapsort: PROCEDURE expose stem.

  M = stem.0
  N = M

  do k=M % 2 to 1 by -1
    call DownHeap k N
  end /* do */

  do while N>1
    t = stem.1
    stem.1 = stem.n
    stem.n = t
    n = n-1
    call DownHeap 1 N
  end /* do */
RETURN

/* subroutine of HeapSort                                             */
DownHeap: PROCEDURE expose stem.
  parse Arg k N

  v = stem.k

  do while k <= N%2
    j = k+k
    if j < n then
    do
      i = j+1
      if stem.j << stem.i then                               /* v2.80 */
        j=j+1
    end  /* do */

    if v >>= stem.j then                                     /* v2.80 */
      signal Label

    stem.k = stem.j
    k = j
  end /* do */

Label:
  stem.k = v
RETURN


[Back: Flexible Quick sort]
[Next: Shellsort routine - 1 -]