[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]
{ Arrrggghh. I hate Bubble sorts. Why don't you use Merge sort? It's a hell
of a lot faster and if you have a large enough stack, there wouldn't be
any problems. if you were not interested in doing a recursive sort, then
here is an example fo the Shell sort which is one of the most efficient
non recursive sorts around.
}
Const
Max = 50;
Type
ArrayType = Array[1..Max] of Integer;
Var
Data, Temp : ArrayType;
Response : Char;
X, Iteration : Integer;
Procedure ShellSort (Var Data : ArrayType;Var Iteration : Integer;
NumberItems : Integer);
Procedure Sort (Var Data : ArrayType; Var Iteration : Integer;
NumberItems, Distance : Integer);
Var
X, Y : Integer;
begin {Sort}
Iteration := 0;
For Y := Distance + 1 to NumberItems Do
begin {For}
X := Y - Distance;
While X > 0 Do
begin {While}
if Data[X+Distance] < Data[X] then
begin {if}
Switch (Data[X+Distance], Data[X], Iteration);
X := X - Distance;
Iteration := Iteration + 1
end {if}
else
X := 0;
end; {While}
end {For}
end; {Sort}
begin {ShellSort}
Distance := NumberItems div 2;
While Distance > 0 do
begin {While}
Sort (Data, Iteration, NumberItems, Distance);
Distance := Distance div 2
end; {While}
end; {ShellSort}
[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]