Foros del Web » Programando para Internet » PHP »

Ordenamiento de matrices

Estas en el tema de Ordenamiento de matrices en el foro de PHP en Foros del Web. Hola Tengo una matriz de este tipo: Código PHP: $transportes [ 0 ][ 'nombre' ] =  "Avion" ; $transportes [ 1 ][ 'nombre' ] =  "Automovil" ; ...
  #1 (permalink)  
Antiguo 26/02/2009, 20:10
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Pregunta Ordenamiento de matrices

Hola

Tengo una matriz de este tipo:

Código PHP:
$transportes[0]['nombre'] = "Avion";
$transportes[1]['nombre'] = "Automovil";
$transportes[2]['nombre'] = "Bicicleta";

$transportes[0]['velocidad'] = 400;
$transportes[1]['velocidad'] = 140;
$transportes[2]['velocidad'] = 25

¿Cómo ordenarían los TRANSPORTES según su velocidad?
  #2 (permalink)  
Antiguo 26/02/2009, 21:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 927
Antigüedad: 16 años, 4 meses
Puntos: 12
Respuesta: Ordenamiento de matrices

esas ya estan arregladas pero si estan desarregladas te recomiendo esto:

Código PHP:
//buble sort hay mejores pero este es el mas sneillo de entender
for($x 0$x $array_size$x++) {
  for(
$y 0$y $array_size$y++) {
    if(
$ran[$x] < $ran[$y]) {
      
$hold $ran[$x];
      
$ran[$x] = $ran[$y];
      
$ran[$y] = $hold;
    }
  }

es uno d elo smenos efectivos y como es un arreglo bidimensional psses mas facil ya que solo $ran es el array $transportes[0]['velocidad'] pones eso en vez de ran y deveri de servir
  #3 (permalink)  
Antiguo 26/02/2009, 21:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Ordenamiento de matrices

O en dado caso array_multisort.

Saludos
  #4 (permalink)  
Antiguo 27/02/2009, 11:39
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Ordenamiento de matrices

Hola, gracias por responder.

Lo que yo estaba usando era algo similar al buble sort, pero como vos decis (Edig) es poco eficiente :/

Ahora armé algo con array_multisort (grax gatorv).

Aca esta la función:

Código:
foreach ($$transportes as $llave => $fila) {
    $velocidad[$llave]  = $fila['velocidad'];
    $nombre[$llave] = $fila['nombre'];
}

array_multisort($velocidad, SORT_DESC, $id, SORT_ASC, $transportes);
Esto funciona bien pero tambien sospecho de que consuma muchos recursos (teniendo en cuenta que voy a trabajar con arrays grandes).

Igualmente todo lo que es ordenar matrices es sabido que consume mucho ¿estoy en lo cierto?

Gracias de nuevo muchachoss
  #5 (permalink)  
Antiguo 28/02/2009, 00:47
 
Fecha de Ingreso: diciembre-2007
Mensajes: 927
Antigüedad: 16 años, 4 meses
Puntos: 12
Respuesta: Ordenamiento de matrices

si quieres puedes usar el quick sort para php es muchsiimo mas eficiente
  #6 (permalink)  
Antiguo 28/02/2009, 03:24
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Ordenamiento de matrices

Aquí tienes información adicional acerca del algoritmo de ordenamiento quick sort.

Es un ejemplo de webtalle y una class del phpclasses

http://www.phpclasses.org/browse/package/3823.html

http://www.webtaller.com/construccio...cksort_php.php
  #7 (permalink)  
Antiguo 28/02/2009, 07:26
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Ordenamiento de matrices

El mejor algoritmo que puedes usar es el mergesort ya que siempre tarda n log(n) mientras que el quicksort en el peor de los casos tarda n^2. Lo malo es que el recurso de memoria es n mientras que quicksort es 1.

Depende lo que quieras optimizar, tiempo o memoria elige quicksort o mergesort.
  #8 (permalink)  
Antiguo 01/03/2009, 17:00
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Ordenamiento de matrices

Muy buena info!!

Muchas gracias!! Ya me pongo a leer con detalle y veo con cual me quedo, me vino muy bien esto del quicksort y megasort, despues comento qué experiencia tuve.

Salduos y graciass
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 06:53.