1. Использовать цикл For - минус одна проверка на итерацию.
2. Переписать механизм сравнения. у тебя он излишне сложный.
Код:
For I := Low(Contacts) To High(Contacts)-1 Do
For J := I + 1 To High(Contacts) Do
Begin
If Contacts[i].Status = Contacts[J].Status
Then
Begin
If Contacts[i].Nick > Contacts[J].Nick Then
Begin
Buf := Contacts[i];
Contacts[i] := Contacts[J];
Contacts[J] := Buf;
End;
End
Else
If Contacts[i].Status > Contacts[J].Status Then
Begin
Buf := Contacts[i];
Contacts[i] := Contacts[J];
Contacts[J] := Buf;
End;
End;