Быстрый алгоритм сортировки больших массивов
Автор: Delirium
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Быстрый алгоритм сортировки больших массивов
Сортировка вариантного массива методом Шелла.
Зависимости: Variants
Автор: Delirium, Master_BRAIN@beep.ru, ICQ:118395746, Москва
Copyright: Delirium (Master BRAIN)
Дата: 4 июня 2002 г.
***************************************************** }
procedure Sorting(Down: boolean; var Data: Variant);
var
Skach, m, n: integer;
St: boolean;
Tmp: Variant;
begin
Skach := VarArrayHighBound(Data, 1) - 1;
while Skach > 0 do
begin
Skach := Skach div 2;
repeat
St := True;
for m := 0 to VarArrayHighBound(Data, 1) - 1 - Skach do
begin
n := m + Skach;
if (Down and (Data[n] < Data[m]))
or ((not Down) and (Data[n] > Data[m])) then
begin
Tmp := Data[m];
Data[m] := Data[n];
Data[n] := Tmp;
St := False;
end;
end;
until St;
end;
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
A: Variant;
i: integer;
begin
A := VarArrayCreate([0, Memo1.Lines.Count - 1], varVariant);
for i := 0 to Memo1.Lines.Count - 1 do
A[i] := Memo1.Lines.Strings[i];
Sorting(True, A);
for i := 0 to Memo1.Lines.Count - 1 do
Memo1.Lines.Strings[i] := A[i];
end;
|