Re: Стабильная сортировка массива из 0 и 1
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.07.09 20:22
Оценка: +1
Здравствуйте, mrk84, Вы писали:

M>Имеется массив из n объектов. У объектов есть ключ, принимающих два значения: 0 или 1.

M>Надо придумать максимально эффективный алгоритм, который выполняет стабильную сортировку массива по ключу.
M>Объём дополнительно используемой памяти должен быть O(1).

Ну придумай что-нить сам. Что-то типа такого

type
  TSomeObject = class
    Key: Boolean;
    // Other fields
  end;  

procedure SortArray(var A: array of TSomeObject);
var
  Lo, Hi: Integer;
  SavedLo: TSomeObject;
begin
  Lo := Low(A);
  Hi := High(A);
  repeat
    if Lo >= Hi then Exit;

    while A[Lo] = False do
    begin
      Lo := Lo + 1;
      if Lo >= Hi then Exit;
    end;

    while A[Hi] = True do 
    begin
      Hi := Hi - 1;
      if Lo >= Hi then Exit;
    end;

    SavedLo := A[Lo];
    A[Lo] := A[Hi];
    A[Hi] := SavedLo;

    Lo := Lo + 1;
    Hi := Hi - 1;
  until False;
end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.