home *** CD-ROM | disk | FTP | other *** search
- (* sssss oooo rrrrr ttttttt
- s s o o r r ttttttt
- s o o r r ttt
- s o o r r ttt
- s o o r r ttt
- sss o o rrrrr ttt
- s o o r r ttt
- s o o r r ttt
- s o o r r ttt
- s s o o r r ttt
- ssss oooo r r ttt *)
- {----------------------------------------------------------------------------}
- { This set of routines is a quick sort algorithem that sorts an }
- { array of data and puts it in order from pos 1 to 40, you need }
- { to change the compare routines if you are sorting different data }
- {----------------------------------------------------------------------------}
-
- Procedure Sort_List (var values : SortArray; lo, hi : integer);
- var new_lo,
- new_hi : integer; { used to divide the array of values }
- center_value,
- hold_value : String41; { used when values are swapped }
-
- Procedure Swap_Values (Low, High: integer);
- var hold_value : String41;
- begin
- hold_value := values[low];
- values[low] := values[high];
- values[high] := hold_value;
- end; { Swap_Values }
-
- Procedure Divide_Array(left, right: integer);
- var center_value,
- hold_value : String41;
- begin
- center_value := values[(hi + lo) div 2];
- left := lo; right := hi;
- while (left <= right) do
- begin
- while(values[left] < center_value) do
- left := Succ(left);
- while(values[right] > center_value) do
- right := Pred(right);
- if (left <= right) then
- begin
- Swap_Values(left,right);
- left := Succ(left);
- right := Pred(right);
- end; { if }
- end; { while }
- new_lo := left;
- new_hi := right;
- end; { divide_array }
-
- begin { SortList }
- if ((hi - lo) > 1) then
- begin
- Divide_Array(lo,hi);
- Sort_List(values,lo,new_hi);
- Sort_List(values,new_lo,hi);
- end
- else
- if ((hi - lo) = 1) then
- if (values[hi] < values[lo]) then
- Swap_Values(lo,hi);
- end; { Sort_List }
-
- { end of Sort_List routine }