Package: GNAT.Heap_Sort_A

Description

This package provides a heapsort routine that works with access to subprogram parameters, so that it can be used with different types with shared sorting code. See also GNAT.Heap_Sort_G, the generic version, which is a little more efficient but does not allow code sharing. The generic version is also Pure, while the access version can only be Preelaborate.

Header

package GNAT.Heap_Sort_A is
 
pragma Preelaborate (Heap_Sort_A);

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.

Type Summary

Lt_Function
Move_Procedure

Other Items:

type Move_Procedure is access procedure (From : Natural; To : Natural);
A pointer to 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 the single temporary location used by the sort.

type Lt_Function is access function (Op1, Op2 : Natural) return Boolean;
A pointer to 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.

procedure Sort (N : Natural; Move : Move_Procedure; Lt : Lt_Function);
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_A;