Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/11/2010, 13:02
manowar29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Metodo de ordenacion

Basandonos en el metodo de ordenacion de la burbuja, tengo que hacer 1 metodo para ordenar numeros, de la siguiente forma:

Vuelta1: Se coge el numero mas grande de todo el array, y se manda a la ultima posicion de éste.
nota: Una vez hecha esta vuelta, esta ultima posicion del array ya no sera examinada en la proxima vuelta, ya que ya sabemos que esta en el orden correcto.

Vuelta2: Cojemos el numero mas pequeño del array y lo mandamos en la primera posicion del array.
nota: A partir de ahora la posicion1 y la ultima posicion del array no seran examinadas, puesto que ya estan ordenadas.

Vuelta3: Cojemos el numero mas grande del array, y se manda a la ultima posicion de éste.
nota: Como siempre tendremos en cuenta que la posicion 1 y las 2 ultimas ya no seran examinadas.

Vuelta4: se coge el mas pequeño del array, y se manda a la primera posicion.

Asi iremos haciendo sucesivamente, cogiendo primero el mas grande, luego el pequeño, grande otra vez, pequeño otra vez, hasta que queden ordenados del todo; Siempre teniendo en cuenta que una vez que una posicion haya sido ordenada, ya no la tendremos en cuenta en la siguiente vuelta.

Sabiendo que este metodo esta basado en el metodo de la burbuja, he intentado implementar el metodo de la burbuja como he podido para ir partiendo desde ahi.

Esto es lo que tengo por el momento:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int v[6],i,j,n,aux;
int centinella;

v[0]=13;
v[1]=24;
v[2]=38;
v[3]=5;
v[4]=9;

printf("\nNumeros sin ordenar:\n");
for(i=0;i<5;i++)
{
printf("%d\n",v[i]);
}

n=5;
centinella=1;
for(j=0;(j<n)&&(centinella);j++)
{
centinella=0;
for(i=0;i<(n-1-j);i++)
{
if(v[i]>v[i+1])
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
centinella=1;
}
}
}
printf("\nNumeros ordenados:\n");
for(i=0;i<5;i++)
{
printf("%d\n",v[i]);
}

return 0;
}