Tengo el siguiente ejercicio:
"3.Implementar en una función el siguiente algoritmo para ordenar un array de enteros.
La idea es recorrer simultáneamente el array desde el principio y desde el final, comparando los elementos. Si los valores comparados no están en el orden adecuado, se intercambian y se vuelve a empezar el bucle. Si están bien ordenados, se compara el siguiente par.
El proceso termina cuando los punteros se cruzan, ya que eso indica que hemos comparado la primera mitad con la segunda y todos los elementos estaban en el orden correcto.
Usar una función con tres parámetros:
void Ordenar(int* vector, int nElementos, bool ascendente);
De nuevo, no se deben usar enteros, sólo punteros y aritmética de punteros."
El problema esta en que los elementos no parecen intercambiarse ni ordenarse, e incluso algunos toman el valor del estilo de -88483432.
Este es mi código:
Código
#include <iostream> using namespace std; void Ordenar(int*, int, bool); int main() { int lista[10] = { 1, 4, 2, 5, 3, 7, 6, 9, 8, 10 }; for (int i = 0; i <= 9; i++) { cout << lista[i] << " "; } cout << endl; Ordenar(lista, 10, 0); for (int i = 0; i <= 9; i++) { cout << lista[i] << " "; } cin.sync(); cin.get(); return 0; } void Ordenar(int *vector, int nElementos, bool ascendente) { int *q, *p; p = vector; q = &vector[nElementos]; if (ascendente) { while (p <= q) { if (*p > *q) { *p += *q; *q = *p - *q; *p -= *q; } p++; q--; } } else { while (p <= q) { if (*p < *q) { *p += *q; *q = *p - *q; *p -= *q; } p++; q--; } } }