Voy de mal en peor :S
}
void Ordenar(int *vector,int nElementos, bool ascendente)
{
int *a, *b;
a=&vector[0]; b=&vector[nElementos-1];
for (int x=0;x<nElementos;x++)
{
for (int y=nElementos-1;y>0;y--)
{
int *temp;
if (*(a+x)>*(b-nElementos+y-1)) { temp=a+x; *(a+x)=*(b-nElementos+y-1); *(b-nElementos+y-1)=*temp; }
if (*(a+x)<*(b-nElementos+y-1)) { temp=b-nElementos+y-1; *(b-nElementos+y-1)=*(a+x); *(a+x)=*temp; }
}
}
}
Esto es lo que intenté hacer, pero sigo sin conseguirlo, :s, alguna idea?
Es que no sé que intentas hacer...
2 consejos:
- *(a+x) == a
- (y se lee mejor)
- el bucle del interior, y empieza en nElementos -1, pero tú usas -nElementos-1+y == y- nElementos - 1 == (nElementos-1)-nElementos-1 == 0 - 2, esto te cascará pues paras en y = 1 => b -nElementos == (vector+nElementos -1) -nElementos == vector-1(ilegal)
Hay 2 algoritmos parecidos de ordenación conocidos, mergesort y quicksort, ambos de tipo divide y vencerás.
Mergesort(es más parecido al tuyo) - ordena la mitad del vector y luego mezcla ambos vectores ordenados
Quicksort separa los mayores de un pivote de los menores en 2 particiones y ordena ambas mitades por el mismo método.
También tienes la burbuja que tenía una variante que sube y baja.
Yo no sé cómo se diseña un algoritmo de ordenación pero ya lo intenté alguna vez y no es sencillo, seguramente se necesite un desarrollo matemático, o al menos un pensamiento profundo. Si expones tu idea te podremos ayudar pero si estás codeando sin pensarlo es difícil que te salga(al menos has de contemplar todos los casos).