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

(*
 -=> Quoting Tim Benoit to All <=-

 TB> I am having a bit of difficulty figuring out how to sort an
 TB> array of records by numerical or alphabetical order.
 TB>                  I need all the information that goes with that
 TB> specific Record to stay with it...

    This example uses a modified bubblesort algorithm, not real fast but
fairly easy to follow. You may want to use a faster sort procedure but
the basic idea is to examine the data in your selected sort
field (RecArray[i].variable) but do the sort on the whole
record (RecArray[i]):

eg:
     Var

         Buffer : Rec;

     If RecArray[3].Number1 > RecArray[4].Number1 then { sort }

        Begin   { interchange RecArray[3] and RecArray[4] }
                Buffer := RecArray[3];
                RecArray[3] := RecArray[4];
                RecArray[4] := Buffer
        End;

Bubblesort makes multiple passes moving data only one place per pass.
This example is similar but uses only one pass.
*)

Program Modsort;

uses Crt;      {only needed for clrscr}

Const
  max = 10;      {max number of records}

Type
  fieldtype = string[2];
  datatype = record
         rec1 : fieldtype;
         rec2 : fieldtype;
         end;
Var
  data : array [1..max] of datatype;
  i,j : byte;

Procedure interchange(r,l:datatype);

Var
   buffer : datatype;

Begin
     buffer := r;
     data[i] := l;
     data[i+1] := buffer;
     dec(i);
End;

Procedure sort(j : byte);  {j is the selected sort field number}

Var
   field : array [1..2] of fieldtype;

Begin
   i := 1;

   While i < max  do
         Begin
            Case j of
                1 : Begin
                       field[1] := data[i].rec1;
                       field[2] := data[i+1].rec1;
                    End;
                2 : Begin
                       field[1] := data[i].rec2;
                       field[2] := data[i+1].rec2;
                    End;
            End;

         If field[1] > field[2] then
            Interchange(data[i], data[i+1])
         Else
            Inc(i);
         End;
End;

Begin                              {main}

Clrscr;
Writeln('UNSORTED :');
For i := 1 to max do              {make up random array of alphas}
    Begin
        j := random(26);
        data[i].rec1 := chr(j+65);
        Write(data[i].rec1);
        j := random(26);
        Data[i].rec2 := chr(j+65);
        Writeln(',',data[i].rec2);
    End;

Write('Sort on which field? ');
Readln(j);
Sort(j);
Writeln('SORTED ON FIELD: ',j);

For i := 1 to max do
    Begin
        Write(data[i].rec1);
        Writeln(',',data[i].rec2);
    End;

End.

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