**[**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**]**