{ This is using the concept of a PoINter Array (an Array of PoINters). It allows For a _very_ large amount of data, sINce you allocate each Record space of the Heap. You must allocate each space For each Record as you create the Record: } New (INFOSTUFF[3]); { allocates space For 3rd Record } With INFOSTUFF[6]^ do { works With 6th Record } begin NAME := 'Patrick Edwards'; IDNUM := 60000; MOM := '' end; The sort could be: Var T : INFO; Procedure L_HSorT (LEFT,RIGHT : Word); { Lo-Hi QuickSort } Var LOWER,UPPER,MIDDLE : Word; PIVOT : INFO; begin LOWER := LEFT; UPPER := RIGHT; MIDDLE := (LEFT+RIGHT) div 2; PIVOT := INFOSTUFF[MIDDLE]^; Repeat While INFOSTUFF[LOWER]^.NAME < PIVOT.NAME do INc(LOWER); While PIVOT.NAME < INFOSTUFF[UPPER]^.NAME do Dec(UPPER); if LOWER <= UPPER then begin T := INFOSTUFF[LOWER]^; INFOSTUFF[LOWER]^ := INFOSTUFF[UPPER]^; INFOSTUFF[UPPER]^ := T; INc (LOWER); Dec (UPPER); end; Until LOWER > UPPER; if LEFT < UPPER then L_HSorT (LEFT, UPPER); if LOWER < RIGHT then L_HSorT (LOWER, RIGHT); end; { L_HSorT } { called as: L_HSorT (1,10); }