home *** CD-ROM | disk | FTP | other *** search
- { Author: Brian Pape. }
-
- Const
- maxrange = 5000;
-
- Type
- ListRange = 1..MaxRange;
- list = Array[ListRange] of Integer;
-
- Var
- a,b: list;
- i: Integer;
-
- Procedure BubbleSort(Var B : list; Terms : Integer);
- Var
- J, Temp : Integer;
- Changed : Boolean;
- Last,
- LastSwitch : Integer;
- begin
- changed := True;
- Last := Terms-1;
- While Changed do
- begin
- changed := False;
- For J := 1 to Last do
- If B[J] > B[J+1] then
- begin
- Temp := B[J];
- B[J] := B[J+1];
- B[J+1] := Temp;
- Changed := True;
- LastSwitch := j;
- end; { If B[J] }
- Last := LastSwitch -1;
- end { While Changed }
- end; { BubbleSort }
-
- Procedure Min_MaxSort(Var a : list; NumberTerms : ListRange);
- Var
- temp,
- i,l,r,
- min,max,
- tempMin,
- tempMax,
- indexMin,
- indexMax,
- s1,s2,s3,s4 : Integer;
- changed : Boolean;
- begin
- l := 1; r := NumberTerms; max := MaxInt;
- Repeat
- min := max;
- changed := False;
- max := 0;
- For i := l to r do
- begin
- if a[i] > max then
- begin
- changed := True;
- Max := a[i];
- indexMax := i;
- end; { if }
- if a[i] < min then
- begin
- changed := True;
- Min := a[i];
- indexMin := i;
- end; { if }
- end; { For }
-
- tempMin := a[indexMin];
- tempMax := a[indexMax];
- a[indexMax] := a[l];
- a[l] := tempMin;
- a[indexMin] := a[r];
- a[r] := tempMax;
- inc(l); dec(r);
- Until (l>=r) or not changed;
- end; { Min_MaxSort }
-
-
- Procedure ShellSort(Var a : list; NumberTerms : ListRange);
- Const
- start = 1;
- increment = 3; { division factor of terms }
- Var
- i,j : ListRange;
- t : Integer;
- found : Boolean;
- begin
- i := start + increment;
- While i <= NumberTerms do
- begin
- if a[i] < a[i - increment] then
- begin
- j := 1;
- t := a[i];
- Repeat
- j := j - increment;
- a[j + increment] := a[j];
- if j = 1 then
- found := True
- else
- found := a[j - increment] <= t;
- Until found;
- a[j] := t;
- end; { if }
- i := i + increment;
- end; { While }
- end; { ShellSort }