Foros del Web » Programando para Internet » PHP »

metodo burbuja en el lenguaje de programacion PHP

Estas en el tema de metodo burbuja en el lenguaje de programacion PHP en el foro de PHP en Foros del Web. Hola, bueno tengo un problema, tengo que ordenar los numeros de un array de menor a mayor con el metodo burbuja, pensando mucho hice esto, ...
  #1 (permalink)  
Antiguo 07/08/2011, 13:37
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Pregunta metodo burbuja en el lenguaje de programacion PHP

Hola, bueno tengo un problema, tengo que ordenar los numeros de un array de menor a mayor con el metodo burbuja, pensando mucho hice esto, pero no se porque no me funciona :

Código PHP:
Ver original
  1. <?php
  2.   function ordenar(&$a)
  3.   {
  4.   $indice=count($a);
  5.   $med=count($a);
  6.    for($i=0;$i<$med;$i++)
  7.    {
  8.     for($indice=$indice-1;$indice>$i;$indice--)
  9.     {
  10.        if($a[$indice]<$a[$indice-1])
  11.        {
  12.          $auxiliar=$a[$indice];
  13.          $a[$indice]=$a[$indice-1];
  14.          $a[$indice]=$auxiliar;      
  15.        }
  16.     }
  17.    }   
  18.   }
  19. $a=array(2,35,22,20,15);
  20. ordenar($a);
  21. $medi=count($a);
  22. for($e=0;$e<=$medi;$e++)
  23. {
  24.   echo $a[$e]."<br/>";
  25. }
  26. ?>

Les pediria que me digan que estoy haciendo mal, y no me digan lo de sort y asort porque los tengo que ordenar con burbuja y no me sale.

Cuando lo ejecuto me sale el orden de los numeros del array tal cual estan ubicados, ocea es como si no funcionara la funcion

Última edición por felire; 07/08/2011 a las 13:43
  #2 (permalink)  
Antiguo 07/08/2011, 13:53
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años, 6 meses
Puntos: 322
Respuesta: metodo burbuja en el lenguaje de programacion PHP

El error no es el método que haces, si no el cómo llamas a la función
Inténtalo así:
Código PHP:
Ver original
  1. //Al final de la función, justo antes de cerrarla, pon esto:
  2. return $a;
  3.  
  4. //Después de cerrarla
  5.  
  6. $a=array(2,35,22,20,15);
  7. $a = ordenar($a);
  8. $medi=count($a);
  9. for($e=0;$e<=$medi;$e++)
  10. {
  11.   echo $a[$e]."<br/>";
  12. }

Y aún más fácil es con un foreach:
Código PHP:
Ver original
  1. //Pones lo mismo antes de cerrar la funcion, despues, esto
  2. $a=array(2,35,22,20,15);
  3. $a = ordenar($a);
  4.  
  5. foreach($a as $a)
  6. {
  7.   echo $a.'<br />';
  8. }

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #3 (permalink)  
Antiguo 07/08/2011, 13:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Trata el ejemplo que muestran aquí http://es.wikipedia.org/wiki/Ordenam...rci%C3%B3n#PHP La idea es que el primer for, corra por primera los números guardas el valor en la variable temporal y en el segundo for verificas la variable temporal contra la variable que muestra el segundo for, si es mayor el números del segundo for entonces guardas en su lugar el número que tienes en la variable temporal, si no pues lo guardas luego. Bueno algo así es la idea
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 07/08/2011, 13:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Otra forma de hacerlo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function ordenar($a) {
  4.     for ($i = 0; $i < count($a); $i++) {
  5.         for ($j = 0; $j < count($a); $j++) {
  6.             if ($a[$i] < $a[$j]) {
  7.                 $temp = $a[$i];
  8.                 $a[$i] = $a[$j];
  9.                 $a[$j] = $temp;
  10.             }
  11.         }
  12.     }
  13.  
  14.     return implode(', ', $a);
  15. }
  16.  
  17. $a = array(2, 35, 22, 20, 15);
  18.  
  19. echo ordenar($a);
  20. ?>

Lo que con función de arrays sería:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $a = array(2, 35, 22, 20, 15);
  4.  
  5. sort($a, SORT_NUMERIC);
  6.  
  7. echo implode(', ', $a);
  8.  
  9. ?>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 07/08/2011, 14:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Y creo que la mejor forma es usar natorder, pero es a discreción del usuario
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 07/08/2011, 14:02
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Sourcegeek hice lo que me dijiste con el for y con el forache y no hay caso, me recorre el array pero tal cual lo escribi yo
  #7 (permalink)  
Antiguo 07/08/2011, 14:04
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

abimaelrc probe con el ejemplo de wikipedia y tampoco me funciona, el array lo recorre tal cual lo escribi yo
  #8 (permalink)  
Antiguo 07/08/2011, 14:06
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

andresdzphp tu metodo me funciona, pero asi aprendo algo yo, no me dirias que hago mal en mi script?
  #9 (permalink)  
Antiguo 07/08/2011, 14:11
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Una duda medio tonta, con el implode , invertis los elementos del array?
  #10 (permalink)  
Antiguo 07/08/2011, 14:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Cita:
implode — Une elementos de un array en una cadena
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #11 (permalink)  
Antiguo 07/08/2011, 14:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: metodo burbuja en el lenguaje de programacion PHP

El ejemplo del wiki sí funciona, ¿como lo haz hecho?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 07/08/2011, 14:24
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

andres no me explicas tu codigo porque lo trato de entender y no entiendo como si empesas de atras para adelante te quedan ordenados de menor a mayor
  #13 (permalink)  
Antiguo 07/08/2011, 14:28
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

abimaelrc llame a la funcion y la recorri con un foreach y me aparece todo igual
  #14 (permalink)  
Antiguo 07/08/2011, 14:36
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Sourcegeek perdona, no habia viste tu $a = ordenar($a); lo hice y me anda perfecto, muchas gracias
  #15 (permalink)  
Antiguo 07/08/2011, 14:38
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años, 6 meses
Puntos: 322
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Qué bien.

Por cierto, no ocupas poner mensaje tras mensaje...
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #16 (permalink)  
Antiguo 07/08/2011, 14:49
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: metodo burbuja en el lenguaje de programacion PHP

aquí está la forma que te decía @abimaelrc

Código PHP:
Ver original
  1. <?php
  2.  
  3. function ordenar($arr) {
  4.     $count = count($arr);
  5.     for ($i = 1; $i < $count; $i++) {
  6.         $tmp = $arr[$i];
  7.         for ($j = $i - 1; $j >= 0 && $arr[$j] > $tmp; $j--)
  8.             $arr[$j + 1] = $arr[$j];
  9.         $arr[$j + 1] = $tmp;
  10.     }
  11.     return $arr;
  12. }
  13.  
  14. $a = array(2, 35, 22, 20, 15);
  15.  
  16. foreach (ordenar($a) as $o) {
  17.     echo $o . '<br />';
  18. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 07/08/2011 a las 14:54
  #17 (permalink)  
Antiguo 08/08/2011, 12:18
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

andresdzphp me tira error en la linea donde se declara la funcion ese metodo q me pasaste
  #18 (permalink)  
Antiguo 08/08/2011, 12:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Creo que están claras esas funciones... Muestra como las estás usando.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #19 (permalink)  
Antiguo 08/08/2011, 19:48
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Código PHP:
Ver original
  1. <?php
  2. function ordenar($arr) {
  3. * * $count = count($arr);
  4. * * for ($i = 1; $i < $count; $i++) {
  5. * * * * $tmp = $arr[$i];
  6. * * * * for ($j = $i - 1; $j >= 0 && $arr[$j] > $tmp; $j--) {
  7. * * * * * * $arr[$j + 1] = $arr[$j];
  8. * * * * $arr[$j + 1] = $tmp;
  9. * * }
  10.   }
  11. * * return $arr;
  12. }
  13. *
  14. $arr = array(2, 35, 22, 20, 15);
  15. *
  16. foreach (ordenar($arr) as $o) {
  17. * * echo $o . '<br />';
  18. }
  19. ?>

asi estoy usando lo que me dijiste
sin los asteriscos, aparecen solos no se porque.
  #20 (permalink)  
Antiguo 08/08/2011, 19:51
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Trata de no copiarlo, porque el foro genera unos caracteres ocultos que no puedes ver y no te funciona. El código como está funciona perfectamente:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function ordenar($arr) {
  4.     $count = count($arr);
  5.     for ($i = 1; $i < $count; $i++) {
  6.         $tmp = $arr[$i];
  7.         for ($j = $i - 1; $j >= 0 && $arr[$j] > $tmp; $j--)
  8.             $arr[$j + 1] = $arr[$j];
  9.         $arr[$j + 1] = $tmp;
  10.     }
  11.     return $arr;
  12. }
  13.  
  14. $a = array(2, 35, 22, 20, 15);
  15.  
  16. foreach (ordenar($a) as $o) {
  17.     echo $o . '<br />';
  18. }

PD: Copialo directamente no le des en ver original.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #21 (permalink)  
Antiguo 08/08/2011, 19:58
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

ya me anduvo gracias
  #22 (permalink)  
Antiguo 08/08/2011, 20:19
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 42
Antigüedad: 13 años, 3 meses
Puntos: 9
Respuesta: metodo burbuja en el lenguaje de programacion PHP

Al fin pude entender que hacia mal, yo en los for y eso no me equivocaba, lo hice bien desde el principio, lo que hacia mal, que no me ordenaba era esto :
yo escribia :
Código PHP:
Ver original
  1. $aux = $a[$i];
  2.              $a[$i] = $a[$j];
  3.              $a[$i] = $aux;
Cuando lo que tenia que escribir para que funcione era :
Código PHP:
Ver original
  1. $aux = $a[$i];
  2.              $a[$i] = $a[$j];
  3.              $a[$j] = $aux;
Lo que hacia mi script anterior era dejar los numeros tal como estaban, no habia ningun reemplazo.

Igual el primer script que subi aca me cambiaba algunos valores cuando lo arregle pero no todos, ahora pude hacer uno que me funciona perfectamente.
Código PHP:
Ver original
  1. <?php
  2.   function ordenar($a)
  3.   {
  4.     $count = count($a);
  5.     for($i = $count-1;$i>=1;$i--)
  6.       {
  7.         for($j = $i-1;$j>=0;$j--)
  8.           {
  9.             if($a[$i]<$a[$j])
  10.               {
  11.                $aux = $a[$i];
  12.                $a[$i] = $a[$j];
  13.                $a[$j] = $aux;
  14.               }      
  15.           }
  16.       }
  17.       return $a;
  18.   }
  19. $a = array(2,35,22,20,15);
  20. $a = ordenar($a);
  21. foreach($a as $clave => $valor)
  22. {
  23. echo $valor."<br/>";
  24. }
  25. ?>

Última edición por felire; 08/08/2011 a las 20:46

Etiquetas: burbuja, metodo
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 16:45.