Autor
|
Tema: No entiendo algoritmo de ordenamiento (Leído 7,546 veces)
|
JuszR
Desconectado
Mensajes: 2.866
Programming & RI
|
No entiendo este algoritmo de ordenamiento: const int ArraySize = 7; int Numeros[ArraySize] = { 30, 50, 20, 10, 40, 80, 15 }; for (int StartIndex = 0; StartIndex < ArraySize; StartIndex++) { int SmallestIndex = StartIndex; for (int CurrentIndex = StartIndex + 1; CurrentIndex < ArraySize; CurrentIndex++) { if (Numeros[CurrentIndex] < Numeros[SmallestIndex]) SmallestIndex = CurrentIndex; } swap(Numeros[StartIndex], Numeros[SmallestIndex]); }
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
|
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Había puesto otra cosa, pero luego vi la variación Es una variación del de Burbuja: http://es.wikipedia.org/wiki/Ordenamiento_de_burbujaSaludos 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
|
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
Mensajes: 2.866
Programming & RI
|
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.
|
|
|
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Aha! era el de selección, ahora lo veo 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 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
Mensajes: 823
|
hazte una traza en papel, suele ayudar.
|
|
|
En línea
|
|
|
|
Saberuneko
|
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
Mensajes: 2.866
Programming & RI
|
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. 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
Mensajes: 25
|
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: #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
|
|
|
|
|
|