Показать сообщение отдельно
  #2  
Старый 16.07.2009, 18:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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;