Здравствуйте, 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;