Pues... el problema no debería suceder según yo :|... al ejecutarlo sólo me pide que introduzca 1 o 2, cuando lo hago y aprieto enter... me imprime "Elementos de datos en el orden original" y de ahí... NO PASA NADA!, así se queda...
¿Hay algún error? ¿O qué está sucediendo ._.?
Código C++:
Ver original// Ordenamiento multipropósito que usa apuntadores a funciones.
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::setw;
void ordenamientoSeleccion(int[], const int, bool (*)(int, int));
void intercambiar(int * const, int * const);
bool ascendente(int, int);
bool descendente(int, int);
int main()
{
const int tamanioArreglo = 10;
int orden; // 1 = ascendente, 2 = descendente
int contador; // subíndice del arreglo
int a[tamanioArreglo] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
cout << "Escriba 1 para orden ascendente,\n"
<< "Escriba 2 para orden descendente: ";
cin >> orden;
cout << "\nElementos de datos en el orden original\n";
for(contador = 0; contador < tamanioArreglo; contador++)
cout << setw(4) << a[contador];
if(orden == 1)
{
ordenamientoSeleccion(a, tamanioArreglo, ascendente);
cout << "\nElementos de datos en orden ascendente\n";
}else
{
ordenamientoSeleccion(a, tamanioArreglo, descendente);
cout << "\nElementos de datos en orden descendente\n";
}
for(contador = 0; contador < tamanioArreglo; contador++)
cout << setw(4) << a[contador];
cout << endl;
return 0;
}
void ordenamientoSeleccion(int trabajo[], const int tamanio, bool(*compara)(int, int))
{
int menorOMayor;
for(int i = 0; i < tamanio - 1; i++)
{
menorOMayor = i;
for(int indice = i + 1; indice < tamanio; i++)
if(!(*compara)(trabajo[menorOMayor], trabajo[indice]))
menorOMayor = indice;
intercambiar(&trabajo[menorOMayor], &trabajo[i]);
}
}
void intercambiar(int * const elemento1Ptr, int * const elemento2Ptr)
{
int contenido = *elemento1Ptr;
*elemento1Ptr = *elemento2Ptr;
*elemento2Ptr = contenido;
}
bool ascendente(int a, int b)
{
return a < b;
}
bool descendente(int a, int b)
{
return a > b;
}