Sorting with an Index Array

Here are examples of two InsertSort algorithms written in Pascal. The first just swaps list elements. The second swaps elements of an index array instead.

After each algorithm, I've inserted code that could be used to print out the sorted list.

(****************************************************)
(*                   INSERTSORT                     *)
(****************************************************)

 PROCEDURE InsertSort (VAR DataList    : ArrayType;
                          NumElements : Integer);
 VAR
    Inner, Outer : Integer;)
    PlaceFound   : Boolean;
 BEGIN  (* InsertSort *)
   Outer := 2;
   WHILE Outer <= NumElements DO              
   BEGIN
     Inner := Outer;
     PlaceFound := False;
     WHILE (Inner > 1)                 
        AND NOT PlaceFound DO
     BEGIN
       IF DataList[Inner] < DataList[Inner - 1]        (* WILL CHANGE *)
       THEN
         BEGIN
           Swap(DataList[Inner], DataList[Inner-1]);   (* WILL CHANGE *)
           Inner := Inner - 1                          
         END  (* IF out of place *)
       ELSE PlaceFound := TRUE
     END;  (* WHILE inner loop *)
     Outer := Outer + 1
   END  (* outer loop *)
 END;  (* InsertSort *)

PROCEDURE PrintList(VAR DataList : ArrayType;
			NumElements : Integer) ;
VAR
  position : integer ;
BEGIN
  FOR position := 1 TO NumElements DO
          write(DataList[position])    (* WILL CHANGE *)
END ;

(****************************************************)
(*            ** INDEX ** INSERTSORT                *)
(****************************************************)

 PROCEDURE InsertSort (VAR DataList    : ArrayType;
                       VAR IndexArray  : IntArrType ;
                          NumElements : Integer);
 VAR
    Inner, Outer : Integer;)
    PlaceFound   : Boolean;
 BEGIN  (* InsertSort *)
   Outer := 2;
   WHILE Outer <= NumElements DO              
   BEGIN
     Inner := Outer;
     PlaceFound := False;

     WHILE (Inner > 1) AND NOT PlaceFound DO
     BEGIN
       IF DataList[IndexArray[Inner]]            (* DIFFERENCE HERE *)
                < DataList[IndexArray[Inner-1]]  (* DIFFERENCE HERE *)
       THEN
         BEGIN
           Swap(IndexArray[Inner],        (* DIFFERENCE HERE *)
                 IndexArray[Inner-1]);    (* DIFFERENCE HERE *)
           Inner := Inner - 1
         END  (* IF out of place *)
       ELSE PlaceFound := TRUE
     END;  (* WHILE inner loop *)

     Outer := Outer + 1
   END  (* outer loop *)
 END;  (* InsertSort *)


PROCEDURE PrintList ( VAR DataList    : ArrayType;
                      VAR IndexArray  : IntArrType ;
                          NumElements : Integer);
VAR
  position : integer ;
BEGIN
  FOR position := 1 TO NumElements DO
          write(DataList[IndexArray[position]])  (* DIFFERENCE HERE *)
END ;