{ 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 }