Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Metodo de ordenacion

Estas en el tema de Metodo de ordenacion en el foro de C/C++ en Foros del Web. Basandonos en el metodo de ordenacion de la burbuja, tengo que hacer 1 metodo para ordenar numeros, de la siguiente forma: Vuelta1 : Se coge ...
  #1 (permalink)  
Antiguo 15/11/2010, 13:02
 
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;
}
  #2 (permalink)  
Antiguo 16/11/2010, 04:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Metodo de ordenacion

nadie sabe como hacerlo?
  #3 (permalink)  
Antiguo 17/11/2010, 15:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Metodo de ordenacion

60 lecturas 0 respuestas. Que exitazo.
  #4 (permalink)  
Antiguo 17/11/2010, 18:11
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Metodo de ordenacion

Bueno, si nos dieras a conocer que duda tienes, seria mas facil... y trata de utilizar etiquetas code o highlight para hacer tu codigo mas legible (aunque no sea mucho).
  #5 (permalink)  
Antiguo 18/11/2010, 10:07
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Metodo de ordenacion

Hola:

Prueba con esto a ver:
Código C++:
Ver original
  1. void ordenar( int arr[] , int n )
  2. {
  3.     int i = 0;
  4.     int j = n - 1;
  5.     bool buscando_max = true;
  6.     while ( i < j )
  7.     {
  8.         int pos_max_o_min = -1 ;
  9.         int max_o_min = arr[buscando_max ? 0 : n-1];
  10.         for ( int pos = i ; pos <= j ; ++pos )
  11.         {
  12.             if ( (arr[pos] >= max_o_min && buscando_max)
  13.                     || (arr[pos] <= max_o_min && !buscando_max) )
  14.             {
  15.                 max_o_min = arr[pos];
  16.                 pos_max_o_min = pos;
  17.             }
  18.         }
  19.         if ( pos_max_o_min != -1 )
  20.         {
  21.             int x = buscando_max ? j : i;
  22.             int temp = arr[pos_max_o_min];
  23.             arr[pos_max_o_min] = arr[x];
  24.             arr[x] = temp;
  25.         }
  26.         if ( buscando_max )
  27.             j--;
  28.         else
  29.             i++;
  30.         buscando_max = !buscando_max;
  31.     }
  32. }

slds;

Nup_

Etiquetas: metodo, ordenacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:16.