home *** CD-ROM | disk | FTP | other *** search
- {$A-}
- Program QS_Demo;
-
- Const
- N = 400;
-
- Type
- Index = 1..N;
- ToBeSorted = Integer;
- SortArray = Array[1..N] Of ToBeSorted;
-
- Var
- Data: SortArray;
- I: Integer;
-
-
- { Quicksort Procedure
- Requirements: $A- directive (Do not generate absolute code, TURBO),
- Const N = # of items (May be global variable),
- Type Index = 0..N (Or Integer, maybe - N is minimum.),
- Type ToBeSorted = Type to do sort on, and
- Type SortArray = Array[1..N] Of ToBeSorted (N min. again).
- Procedure Syntax: Quicksort(Data) where Data a variable of type SortArray.
- }
- Procedure Quicksort(Var SortData: SortArray);
- Procedure Bubblesort(Low,High: Index);
- Var Switched: Boolean;
- Counter, Pass: Integer;
- Swap: ToBeSorted;
- Begin
- Pass := 1;
- Repeat
- Switched := False;
- For Counter := Low To High-Pass Do
- Begin
- If SortData[Counter]>SortData[Counter+1] Then
- Begin
- Swap := SortData[Counter];
- SortData[Counter] := SortData[Counter+1];
- SortData[Counter+1] := Swap;
- Switched := True
- End;
- End;
- Pass := Pass + 1;
- Until Switched = False;
- End;
- Procedure Partition(Low,High: Index);
- Var LowPos,HighPos: Index;
- Pivot,Swap: ToBeSorted;
- Begin
- LowPos := Low;
- HighPos := High;
- Pivot := SortData[(Low+High) Div 2];
- Repeat
- While SortData[LowPos] < Pivot Do LowPos := LowPos + 1;
- While Pivot < SortData[HighPos] Do HighPos := HighPos - 1;
- If LowPos <= HighPos Then
- Begin
- Swap := SortData[LowPos];
- SortData[LowPos] := SortData[HighPos];
- SortData[HighPos] := Swap;
- LowPos := LowPos + 1;
- HighPos := HighPos - 1;
- End
- Until LowPos>HighPos;
- If HighPos-Low>6 Then Partition(Low,HighPos)
- Else Bubblesort(Low,HighPos);
- If High-LowPos>6 Then Partition(LowPos,High)
- Else Bubblesort(LowPos,High);
- End;
- Begin
- Partition(1,N);
- End;
-
- Begin
- For I := 1 To N Do
- Data[I] := Random(1000);
- Writeln('Initialized data... ');
- For I := 1 To N Do
- Write(Data[I]:4);
- Quicksort(Data);
- Writeln('Sorted Data... ');
- For I := 1 To N Do
-