Una forma de hacerlo sería esta:
Supongamos 3 enteros distintos, a, b, c y queremos ordenarlos de manera que a < b y b < c (de menor a mayor).
int a, b, c; /* Números a ordenar */
int temp; /* Para uso temporal */
/* .../... código para obtener los números a, b y c .../... */
/* Primero comparamos los extremos. */
if (c < a) { /* Intercambiamos a y c */
temp = a;
a = c;
c = temp;
}
/* Ahora sabemos que a < c */
/* Comparamos b con a */
if (b < a) { /* Intercambiamos a y b y hemos terminado */
temp = a;
a = b;
b = temp;
} else if (b > c) { /* De lo contrario, comparamos b con c */
temp = b; /* y los intercambiamos, si procede */
b = c;
c = temp;
}
/* Y ya tenemos los números ordenados: a < b < c */
Aunque, si quieres seguir con tu procedimiento, y ya tienes el número mayor y el menor, los guardas cada uno en una variable, por ejemplo mayor y menor respectivamente, y el del medio sería aquél que fuese distinto del mayor y del menor (es una idea).
if (a != mayor && a != menor) medio = a;
if (b != mayor && b != menor) medio = b;
if (c != mayor && c != menor) medio = c;
Los algoritmos de ordenación pueden ser bastante complejos, y se suelen utilizar arrays (también llamados arreglos) para almacenar y ordenar los valores. Puedes hacer una búsqueda en internet por la palabra quicksort para tener una idea del tema.
Espero haber sido de ayuda.
Un saludo.