[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]

    { File that will teach me how to quick sort?  I know how quick sort works
     but I don't know why my Program doesn't sort properaly.  Sometimes it goes
     through one cycle of sort and sometimes it goes through two cycles of sort
     but it never sorts it Completely! Tek Chan

    Here is some generic source code, change it to suit your needs/Types:
    }

    Procedure Split(Var Info: ArrayType; First: Integer; Last: Integer; Var
    SplitPt1: Integer; Var SplitPt2: Integer);

    Var SplitVal, Temp: ArrayElementType;

    begin
      SplitVal:=Info[(First+Last) div 2];
      Repeat
        While Info[First] < SplitVal do
          First:=First+1;
        While Info[Last] > SplitVal do
          Last:=Last-1;
        if First <= Last then
          begin
            Temp:=Info[First];
            Info[First]:=Info[Last];
            Info[Last]:=Temp;
            First:=First+1;
            Last:=Last-1;
          end
      Until First > Last;
      SplitPt1:=First;
      SplitPt2:=Last;
    end;

    Procedure QuickSort(Var Info: ArrayType;  First:Integer;  Last: Integer);

    Var SplitPt1, SplitPt2: Integer;

    begin
      if First < Last then
        begin
          Split(Info, First, Last, SplitPt1, SplitPt2);
          if SplitPt1 < Last
            then QuickSort(Info, SplitPt1, Last);
          if First < SplitPt2
            then QuickSort(Info, First, SplitPt2);
        end
    end;

    {
    This is a -very- fast sort, much faster than any other I have.  Does a
    non-recursive version exist?  Are there any faster sorts?   Brian
    }

[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]