************************************************************************
* File: inssort.for
************************************************************************
* Scopo: Modulo per l'ordinamento di vettore, secondo l'algoritmo di
*        inserimento (insertion sort)
*        (cfr. libro Calvanese et al. paragrafo 9.2.1)
************************************************************************

      SUBROUTINE InsSort (vett, n)
* Ordina il vettore vett di n elementi utilizzando l'ordinamento per
* inserimento
      IMPLICIT NONE

* Dichiarazioni tipo parametri formali
*   parametri di input
      INTEGER n
*   parametri di input-output
      INTEGER vett(n)

* Dichiarazioni di variabili locali
      INTEGER i, j, valore

      DO 10 i = 1, n-1
        valore = vett(i+1)
        j = i
        DO WHILE ((j .GT. 0) .AND. (vett(j) .GT. valore))
          vett(j+1) = vett(j)
          j = j-1
        ENDDO
        vett(j+1) = valore
 10   CONTINUE

      RETURN
      END