Hay 2 errores en tu algoritmo de ordenamiento:
Primer error: Condición de los bucles for
Tal y como se puede deducir de tu código m es el número total de elementos de tu arreglo, lo que implica que los datos con los que tu quieres trabajar se almacenan desde ar[0] hasta ar[m-1].
Como ya sabrás al implementar el algoritmo de ordenamiento por selección vamos mirando de izquierda a derecha dato a dato y a su vez comprobamos que todos los de la derecha de este no sean (en este caso) mayores que el primero. Por tanto, tu parte más externa del bucle tiene que funcionar hasta llegar a m-2 y tu parte más interna del bucle hasta m-1. Aquí te dejo el fragmento que tú tenías escrito y la versión correcta del mismo.
Versión incorrecta
Código C++:
Ver originalfor (int h=0;h<=m-1;h++){ //ordenamiento
.........
for (int k=h+1; k<=m; k++){
........
}
}
Versión correcta
Código C++:
Ver originalfor (int h=0;h<=m-2;h++){ //ordenamiento
.........
for (int k=h+1; k<=m-1; k++){
........
}
}
Nota: Al trabajar de la forma incorrecta tu algoritmo de ordenación accedía a datos basura lo cual podía haber alterado los datos resultantes. Segundo error: Intercambio de datos
A la hora de mover de sitio ambos datos sólo estás poniendo el menor con los datos del mayor pero no intercambiándolos.
Versión incorrecta
Código C++:
Ver originalfor (int h=0;h<=m-2;h++){ //ordenamiento
.........
for (int k=h+1; k<=m-1; k++){
........
}
ar[posmayor] = ar[h];
}
Versión correcta
Código C++:
Ver originalfor (int h=0;h<=m-2;h++){ //ordenamiento
.........
for (int k=h+1; k<=m-1; k++){
........
}
atraccion intercambio
intercambio=ar[posmayor];
ar[posmayor] = ar[h];
ar[h]=intercambio;
}
Nota aclaratoria: El siguiente código no hace ninguna modificación. El operador de asignación = por defecto copia todos los datos miembros de una clase a la que quieres asignarlo Código innecesario