codice:
  public int rot(int first, int last) {
    int mid = (first + last)/2;
    if (mid==0 || a[mid-1] > a[mid]) {
      return mid;
    }
    else {
      if (a[last] < a[mid]) {
        return rot(mid+1, last);
      }
      else {
        return rot(first, mid-1);
      }
    }
  }
Per forza di cose (visto che l'array è ordinato in ordine crescente) se l'elemento a sx di quello considerato è maggiore di quello considerato allora tale elemento a sinistra è pure il più grande nell'array e quindi l'elemento considerato è il primo (il più piccolo) ed occupa la posizione di ordine "n° rotazioni". Non te ne fai niente dell'elemento a dx (salvo che l'array non sia ordinato in senso decrescente).