/* File: ordins.c */
/* Time-stamp: "2001-05-25 16:08:04 calvanes" */
/* Scopo: funzioni sui vettori */

void InsertionSort(TipoVettore A, int n)
  /* Ordina i primi n elementi del vettore A usando l'algoritmo di ordinamento
     per inserimento. */
{
  int elem_da_sistemare,        /* indice del prossimo elemento da sistemare */
      elem_da_controllare;            /* indice dell'elemento da controllare */
  TipoElemVettore valore_da_sistemare;  /* valore dell'elemento da sistemare */

  for (elem_da_sistemare = 0; elem_da_sistemare < n-1; elem_da_sistemare++) {
    valore_da_sistemare = A[elem_da_sistemare+1];

                                     /* controlla e scala gli elementi partendo
                                        dall'ultimo elemento sistemato */
    elem_da_controllare = elem_da_sistemare;
    while (elem_da_controllare >= 0 &&
           A[elem_da_controllare] > valore_da_sistemare) {
      A[elem_da_controllare+1] = A[elem_da_controllare];
      elem_da_controllare--;
    }
                /* sistema il valore da controllare nel posto rimasto libero */
    A[elem_da_controllare+1] = valore_da_sistemare;
  }
}  /* InsertionSort*/