Generic package: GNAT.Heap_Sort_G

Description

This package provides a generic heapsort routine that can be used with different types of data. See also GNAT.Heap_Sort_A, a version that works with subprogram parameters, allowing code sharing. The generic version is slightly more efficient but does not allow code sharing. The generic version is also Pure, while the access version can only be Preelaborate.

Header

generic
   --  The data to be sorted is assumed to be indexed by integer values from
   --  1 to N, where N is the number of items to be sorted. In addition, the
   --  index value zero is used for a temporary location used during the sort.

   with procedure Move (From : Natural; To : Natural);
   --  A procedure that moves the data item with index From to the data item
   --  with Index To. An index value of zero is used for moves from and to a
   --  single temporary location used by the sort.

   with function Lt (Op1, Op2 : Natural) return Boolean;
   --  A function that compares two items and returns True if the item with
   --  index Op1 is less than the item with Index Op2, and False if the Op1
   --  item is greater than or equal to the Op2 item.

package GNAT.Heap_Sort_G is
 
pragma Pure (Heap_Sort_G);

Other Items:

procedure Sort (N : Natural);
This procedures sorts items in the range from 1 to N into ascending order making calls to Lt to do required comparisons, and Move to move items around. Note that, as described above, both Move and Lt use a single temporary location with index value zero. This sort is not stable, i.e. the order of equal elements in the input is not preserved.
end GNAT.Heap_Sort_G;