package body X0sort is

    procedure Swap (A, B : in out Element_Type) is
        Temp : Element_Type;
    begin
        Temp := A;
        A := B;
        B := Temp;
    end Swap;

    procedure Shsort (List : in out Vector) is
        L : Integer := List'First + 1;
        R, K : Integer := List'Last;
        X : Element_Type;
    begin
        loop
            for J in reverse L .. R loop
                if List (J - 1) > List (J) then
                    Swap (List (J - 1), List (J));
                    K := J;
                end if;
            end loop;
            L := K + 1;
            for J in L .. R loop
                if List (J - 1) > List (J) then
                    Swap (List (J - 1), List (J));
                    K := J;
                end if;
            end loop;
            R := K - 1;
            exit when L > R;
        end loop;
    end Shsort;

end X0sort;