Быстрый алгоритм сортировки больших массивов



Автор: Delirium
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Быстрый алгоритм сортировки больших массивов
Сортировка вариантного массива методом Шелла.
Зависимости: Variants
Автор:       Delirium, [email protected], 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;

Далее: Поразрядная цифровая сортировка »»