Si puedes usar un TList en lugar de un array te facilitarás la tarea. En un TList se guardan punteros, lo que significa que puedes guardar prácticamente cualquier cosa, en este caso, punteros a registros.
Tú no tienes que implementar el método Sort sino únicamente proveer a éste de una función de comparación:
Código Delphi
[-]
function (Item1, Item2: Pointer): Integer;
Esta función debe devolver 1 si Item1 es menor que Item2, 0 si son iguales y -1 si Item1 es mayor que Item2. Entonces, en tu función tú simplemente tienes que examinar los registros que te pasan y comparar los campos que correponda.
// Saludos