Ich hab mich jetzt nicht genau mit dem Algorithmus auseinandergesetzt aber:
1) der 2. Schritt sortiert den Text
d.h. statt
Length(matrix[i]) > Length(matrix[j])
was immer gleich sein sollte, wird eher ein CompareText benötigt
2) du brauchst eine Hilfsvariable zum Austausch
Delphi-Quellcode:
h := matrix[i];
matrix[i] := matrix[j];
matrix[j] := h;