Autor
|
Tema: No entiendo esta lógica [arreglos] [C] (Leído 3,490 veces)
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
Hola, estoy aprendieno C y estoy leyendo un libro, ya voy en el apartado de arreglos, y me tome con un ejemplo del ordenamiento de tipo burbuja utilizando arreglos, lo principal del programa es que inicializa un arreglo con datos cualquiera y los ordena de forma ascendente, pero no entiendo realmente el asunto de las comparaciones que hace, se los dejo, espero alguien me explique saludos. #include <stdio.h> #include <stdlib.h> #define sise 10 int main() { int a[sise]={2,6,4,8,10,12,89,68,45,37}; //inicializamos el arreglo int i, pass, hold; printf("datos ordenados originalmente\n"); for(i =0;i <=sise -1;i ++) {printf("%4d",a [i ]);} for(pass=1;pass<=sise-1;pass++) // se recorre el arreglo for (i=0;i<=sise-2;i++) if(a[i]>a[i+1]){ //se comparan cual es mayor hold=a[i]; //hold toma el valor de a[i] a[i]=a[i+1]; //creo que se modifica el valor de a[1] a[i+1]=hold; } //Se regresa el valor de a[i+1] a hold(valor original) printf("\n Dator ordenados en orden ascendente\n"); for(i=0;i<=sise-1;i++) return 0; }
no entiendo como ocurre el ordenamiento, disculpen soy novato...
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Hola, estoy aprendieno C y estoy leyendo un libro [...]
no entiendo como ocurre el ordenamiento, disculpen soy novato... En la pagina cortesía de Wikipedia: Bubble sort Analysis hay una pequeña animación que muestra el algoritmo en funcionamiento, paso a paso. Otra pagina de interés, en mi opinión la que explica (en ingles) de forma mas sencilla ciertos algoritmos es Animations to Assist Learning Some Key Computer Science Topics, primera sección "Algorithms". Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
hola gracias, ahora lo checo.
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
Adrisim
Desconectado
Mensajes: 18
"El conocimiento es la llave del éxito"
|
Vale, te explicaré qué hace exactamente el Método de la Burbuja. El Método de la Burbuja consiste en hacer comparaciones entre los elementos del arreglo. Si el primer elemento es mayor al siguiente, entonces, lo intercambiará, sino, lo dejará como está. La Burbuja, hará sólamente ''n-1'' pasadas, o comparaciones, puesto que si hiciera la cantidad de comparaciones del tamaño del arreglo, tomaría elementos basura que no están declarados dentro de las dimensiones del arreglo. ¿Esto por qué?. Porque el Método va comparando elementos de dos en dos. Como primer comentario, te puedo decir que has utilizado variables de más; es decir, innecesarias. Con la varible entera ''i'' que declaraste, hubiese sido suficiente para recorrer los índices del arreglo en cada FOR. Pero entiendo por qué lo hiciste, para no confundirte. Ya después te acostumbrarás a no utilizar tantas variables. En fin. Veo que has iniciado tu arreglo. Entonces: // Tu variable 'pass' en el FOR es lo que recorrerá el índica entre corchetes de cada elemento del arreglo. a[0] = 2 a[1] = 6 a[2] = 4 a[3] = 8 a[4] = 10 a[5] = 12 a[6] = 89 a[7] = 68 a[8] = 45 a[9] = 37
// El método de la burbuja, se trata de comparar elementos de dos en dos. Por eso el IF está escrito así:
if (a[pass] > a[pass]+1)
// Teniendo en consideración que ''pass'' empezará en 0 y preguntará si éste, es mayor a ''pass (0) +1'', es decir, 1. // Recuerda que éstos solamente son el incremento de los indices. Lo que en realidad está comparando es si ''a[0] = 2 > a[1] = 6''.
// Como en los primeros dos elementos, la condición no se cumple, pasa a los siguientes dos; es decir: ''a[1] = 6 > a[2] = 4''.
// En este caso, la condición del IF sí se cumple. Entonces, aquí necesitamos una variable auxiliar, que guardará el valor previo del elemento del arreglo que vamos a intercambiar, porque si no lo hacemos así, entonces éste valor se perdería.
// Así, tenemos que ''a[1] = 6'' será asignado a tu varible ''hold'', quedando así: ''hold = 6''. Ahora, lo que se hace después, es asignarle el valor de ''a[2] = 4'', a ''a[1] = 6'', teniendo ahora que ''a[1] = 4''. Y el valor que le otorgamos a ''hold'' en un principio, será el nuevo valor que tomará ''a[2]'', siendo ''a[2] = 6''. Quedando así, ordenado de forma ascendente.
// Lo mismo hará con todos los elementos del arreglo.
Espero que te haya servido. Si no, puedes contactarme o checar alguna otra fuente para entenderle mejor. Suerte.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Como primer comentario, te puedo decir que has utilizado variables de más; es decir, innecesarias. Con la varible entera ''i'' que declaraste, hubiese sido suficiente para recorrer los índices del arreglo en cada FOR. Pero entiendo por qué lo hiciste, para no confundirte. Ya después te acostumbrarás a no utilizar tantas variables. El numero de variables para el algoritmo en el programa de barnix456 es el mínimo: una para controlar el bucle externo y otra para el interno. Otra opción para estudiar el algoritmo es revisar el código fuente sobre este en los foros, solo debe utilizar el motor de búsqueda, por ejemplo uno de los últimos temas donde se trata BubbleSort es Problemas al intentar hacer mas eficiente un algoritmo de ordenacion. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Adrisim
Desconectado
Mensajes: 18
"El conocimiento es la llave del éxito"
|
El numero de variables para el algoritmo en el programa de barnix456 es el mínimo: una para controlar el bucle externo y otra para el interno.
Tienes razón. Cometí un error fatal. Por poco le hice creer al chico que podría hacer más con menos, cuando ya había llenado perfectamente, el perfil de un programa funcional. Discúlpenme ambos.
|
|
|
En línea
|
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
Hola Adrisim muy muy buena tu explicacion, parece que le he entendido, pero como dice rir3760 lo que tengo que hacer es ver mas ejemplos para poder entender mas el metodo burbuja, gracias por sus respuestas me han ayudado muchisimo, gracias.
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
No entiendo que es lo que pasa en esta red.
Hacking Wireless
|
magito
|
7
|
5,449
|
14 Junio 2010, 12:31 pm
por lamaruja
|
|
|
Duda Redes wep Wlan_00 ,Lo que dice esta web tiene logica?
Hacking Wireless
|
Anonymous250
|
3
|
3,320
|
3 Noviembre 2011, 14:49 pm
por Anonymous250
|
|
|
Realmente esta logica me ha confundido...
Scripting
|
NekoOs
|
3
|
2,808
|
22 Febrero 2012, 00:48 am
por Eleкtro
|
|
|
Realmente esta logica me ha confundido...
Scripting
|
NekoOs
|
1
|
1,973
|
21 Febrero 2012, 02:52 am
por Eleкtro
|
|
|
No entiendo que esta mal(en C)
Programación C/C++
|
oxi12pek
|
7
|
3,053
|
2 Noviembre 2012, 18:17 pm
por oxi12pek
|
|