elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No entiendo algoritmo de ordenamiento
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: No entiendo algoritmo de ordenamiento  (Leído 7,546 veces)
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
No entiendo algoritmo de ordenamiento
« en: 2 Noviembre 2010, 12:13 pm »

No entiendo este algoritmo de ordenamiento:
Código
  1. const int ArraySize = 7;
  2. int Numeros[ArraySize] = { 30, 50, 20, 10, 40, 80, 15 };
  3.  
  4. for (int StartIndex = 0; StartIndex < ArraySize; StartIndex++)
  5. {
  6.     int SmallestIndex = StartIndex;
  7.  
  8.    for (int CurrentIndex = StartIndex + 1; CurrentIndex < ArraySize; CurrentIndex++)
  9.    {
  10.        if (Numeros[CurrentIndex] < Numeros[SmallestIndex])
  11.            SmallestIndex = CurrentIndex;
  12.    }
  13.  
  14.    swap(Numeros[StartIndex], Numeros[SmallestIndex]);
  15. }

Soy un novato en C++, no se quejen. :-\


« Última modificación: 2 Noviembre 2010, 12:15 pm por JuszR » En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
Castiblanco


Desconectado Desconectado

Mensajes: 2.438


Ver Perfil WWW
Re: No entiendo algoritmo de ordenamiento
« Respuesta #1 en: 2 Noviembre 2010, 12:52 pm »

Yo no es que entienda perfecto el código, yo el que utilizaba y el que entendía a la perfección es el de "Ordenamiento de burbuja"

Pero igual di que entiendes, pone comentarios a los que no sabes que hace y a los que sabes que hace para que quede más fácil explicarte.

Saludos...


En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #2 en: 2 Noviembre 2010, 12:53 pm »

Había puesto otra cosa, pero luego vi la variación :P
Es una variación del de Burbuja: http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja

Saludos

Edito: ahora que miro, me recuerda a otro :-\
« Última modificación: 2 Noviembre 2010, 13:06 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Castiblanco


Desconectado Desconectado

Mensajes: 2.438


Ver Perfil WWW
Re: No entiendo algoritmo de ordenamiento
« Respuesta #3 en: 2 Noviembre 2010, 13:03 pm »

Si se me hizo similar Novlucker  ^^, pero mucho mejor JuszR con ese articulo de la Wiki uno lo entiende mucho más rápido.

Saludos...
En línea

JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #4 en: 2 Noviembre 2010, 13:05 pm »

Es este exactamente: http://es.wikipedia.org/wiki/Ordenamiento_por_selecci%C3%B3n (Selection sort).
El tema es que entiendo el algoritmo pero no en el código jeje.

1) Busca el número más bajo
2) Intercambia el index
3) Repite los pasos 1 y 2.


 ;D
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #5 en: 2 Noviembre 2010, 13:12 pm »

Aha! era el de selección, ahora lo veo :xD Es que el de selección y el de burbuja son iguales salvo por el intercambio, que uno lo hace durante la comparación y el otro al terminar de recorrer todos los valores, es que soy más asiduo de la burbuja o de las funciones sort que vienen integradas :-X

El código es difícil de explicar más claramente, intenta visualizarlo :-\

Saludos

En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #6 en: 2 Noviembre 2010, 13:16 pm »

hazte una traza en papel, suele ayudar.
En línea

Saberuneko


Desconectado Desconectado

Mensajes: 2.194



Ver Perfil WWW
Re: No entiendo algoritmo de ordenamiento
« Respuesta #7 en: 2 Noviembre 2010, 13:23 pm »

Es basante simple, son dos bucles FOR, dentro de ambos se encuentra la orden de intercambio. Si el número anterior es mayor que el posterior, se intercambian.

Simplemente.
En línea

JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #8 en: 2 Noviembre 2010, 13:52 pm »

hazte una traza en papel, suele ayudar.
Esa es la solución. Es difícil hacer eso teniendo una computadora en frente, pero es muy efectivo. ;D

1) Lee el array [outter for].
2) Compara Current (StartIndex+1) con Smallest que por el momento era 30 (Index 0) [inner for].
3) Si es menor lo intercambia con el momentáneo Smallest [if].
4) Así sucesivamente hasta encontrar el número más chico.
5) Intercambia indexes [swap].
6) Repite todo.


Qué difícil que son los algoritmos. ;-)
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
piou

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: No entiendo algoritmo de ordenamiento
« Respuesta #9 en: 2 Noviembre 2010, 15:55 pm »

Yo te recomiendo que mires paso a paso como van cambiando los numeros, me he hecho este código, es igualq ue el tuyo pero me he inventado una fiuncion swap, que tu no la das:
Código:
#include <stdio.h>

void swap(int *start, int *small)
{
int i = *start;
*start = *small;
*small = i;
}

int main()
{
const int ArraySize = 7;
int StartIndex = 0;
int CurrentIndex = 0;
int i = 0;
int Numeros[7] = { 30, 50, 20, 10, 40, 80, 15 };

for (StartIndex = 0; StartIndex < ArraySize; StartIndex++)
{
     int SmallestIndex = StartIndex;

    for (CurrentIndex = StartIndex + 1; CurrentIndex < ArraySize; CurrentIndex++)
    {
if (Numeros[CurrentIndex] < Numeros[SmallestIndex])
    SmallestIndex = CurrentIndex;
    }

    swap(&Numeros[StartIndex], &Numeros[SmallestIndex]);
}

for (i = 0; i < 7; i++)
{
printf("Nº: %i\n", Numeros[i]);
}
return 0;
}

Es bastante simple, para cada numero mira si los siguientes son menores, en el caso de que lo sean, llama a la función que los cambia, es una manera eficiente de ordenar una lista. Por ahí te han dejado un link a la wikipedia que lo explica bastante bien.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda Algoritmo de Ordenamiento
Programación General
kernel19 4 3,702 Último mensaje 27 Diciembre 2010, 16:54 pm
por BgCRaCK
Ayuda con Ordenamiento en Java
Java
ErnestS3 1 3,884 Último mensaje 25 Noviembre 2010, 01:51 am
por ErnestS3
Algoritmo de ordenamiento?
Programación C/C++
t4r0x 8 4,622 Último mensaje 12 Agosto 2013, 22:46 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines