Bueno, para resolver tu duda en concreto te doy esta respuesta:
Podrías poner un do { } while que abarque todo desde que tiene que elegir la opción hasta el final y hacer que todo repita con la condición de que r!=1 y r!=2. Estilo
do{
Elegis opcion
Proceso de ordenamiento
} while (r!=1&&r!=2);
Obviamente que podrás decir... pero sí yo ya comprobé q r!=1 y r!=2 en el último else! Por qué tengo que poner un do {} while que vuelva comparar y no poner un GOTO!! xD... Bueno (por lo menos a veces yo pienso cosas así) la verdad es que no todo es optimización xD, y poner un do { } while contribuirá muchísimo a la lectura del código... Además, si bien matemáticamente creo q es más óptimo, no creo q se note...
Acá algunas aclaraciones que te hago:
-En vez de copiar dos veces el algoritmo de ordenamiento cambiando tan sólo < por >, lo que comúnmente se hace (especialmente cuando se usan algoritmos más complejos) es independizar el algoritmo que ORDENA del que COMPARA. Así puedes hacer una función como la siguiente (ver explicación abajo):
int funcion (int a, int b, int i)
{
if (a>b)
return !i;
if (a<b)
return i;
Explicación: esta función toma dos enteros, a y b y los compara. El entero i está para indicar sí querés ordenar ascendentemente o al revés... por qué?
Pués, porque fijate que si i=0 la función devolverá 1 cuando a>b y 0 cuando a<b y si i=1 la función devolverá 0 cuando a>b y 1 cuando a<b...
Así el valor de i dependerá del sentido de ordenamiento elegido y en el if del algoritmo de ordenamiento pondrás dicha función...
-Declaras una variable auxiliar temp cada vez que vas a intercambiar los números, creo que sería mejor ya tenerla declarada antes, en la parte que declaras todas las variables.
-El algoritmo que usaste primera vez creo que es un método burbuja de ordenamiento, en el segundo for podrías usar j<10-1-i
En dicho ordenamiento mientras ordenas vas mostrando array
, cuando según el algoritmo que usaste, luego de cada iteración del bucle principal queda ordenado y listo para mostrar array[10-i] y no array...
-Espero que entiendas bien lo que estás haciendo, el error que te corrijieron al principio (en el intercambio) demuestra que no prestaste mucha atención... espero que entiendas también el método que usas. Sino has lo siguiente, recorta muchos papelitos y a cada uno le pones un número... luego los desordenas todos y te pones a ejecutar el algoritmo tu mismo como si tu fueses la computadora, te dará una mayor comprensión del algoritmo que estás utilizando y como optimizarlo
-No me gusta mucho el algoritmo que usas luego, es correcto, pero pereferiría el de incerción (tuve que buscar como se llamaba el que yo me refería pq soy malísimo para los nombres xD) bueno, o sí no el de burbuja con la optimización de que busque hasta donde se hizo el último intercambio...