private int Confronta(TipoVoce voce, int i, int k) { if (!IndiceValido(i)) throw new ArgumentOutOfRangeException("i", i, null); if (!IndiceValido(k)) throw new ArgumentOutOfRangeException("k", k, null); switch (voce) { case TipoVoce.Voto: return (_voti[i].Valore < _voti[k].Valore) ? -1 : (_voti[i].Valore > _voti[k].Valore) ? 1 : 0; break; case TipoVoce.Tipo: return (_voti[i].Tipo < _voti[k].Tipo) ? -1 : (_voti[i].Tipo > _voti[k].Tipo) ? 1 : 0; break; case TipoVoce.Data: return (_voti[i].Data < _voti[k].Data) ? -1 : (_voti[i].Data > _voti[k].Data) ? 1 : 0; break; case TipoVoce.Materia: return (_voti[i].Materia.CompareTo(_voti[k].Materia)); break; default: throw new ArgumentOutOfRangeException("voce", voce, null); } }
public Voti Ordina(TipoVoce voce) { for (var i = 0; i < _dimensione; i++) { var minimo = i; for (var j = i + 1; j < _dimensione; j++) { if (Confronta(voce, j, i) < 0) minimo = j; } if (minimo != i) Scambia(minimo, i); } return this; }