06/10/2013, 15:58
|
| | Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 14 años, 2 meses Puntos: 1 | |
Respuesta: Algoritmo para ordenar matriz sin usar método .SORT, pero con problema. Cita:
Iniciado por zerokilled esta muy bien que te fijes como objetivo desarrollar tus propias funciones, aunque implique reinventar la rueda. de esta manera puedes desarrollar la logística para enfrentar nuevos retos u obstáculos. no obstante, en mi opinión, es preferible usar las funciones nativas del lenguaje siempre que sea posible. al ser nativo, éstas suelen tener un mejor rendimiento comparado con las definidas por el desarrollador. en el único caso que conviene crear su propia versión es cuando hay inconsistencia entre entornos (entiendase navegadores). en mi experiencia, las funciones del core de javascript, no me han presentado ninguna diferencia.
volviendo a tu código... el problema es que estas editando sobre una referencia. cuando invocas perhermanosbis.push(perhermanos[mayor]); , estas pasando una referencia del array mas no una copia. de modo que cualquier cambio que realices en perhermanos[N], perhermanosbis[N], o pN, ‒siendo N un número‒ se verá reflejado en todos ellos porque son una referencia al mismo array. en javascript, todos los objetos se pasan como referencia y los datos primitivos (string, boolean, number) como una copia.
¿qué puedes hacer? en lugar de editar la fecha del array movido a perhermanosbis, elimina el elemento del array original. así, además de evitar la edición, te ahorras tiempo de ejecucción y mejoras el rendimiento. con esto me refiero a que en cada ciclo del bucle, estás comparando un elemento que ya no tienes que comparar. cuando lo eliminas, tienes menos elementos a comparar. para implementar esta solución, tienes que corregir un par de cosas: modificar la condición if, modificar la condición del for externo para que itere hasta quedar el array vacio, cambiar la línea que escribe 'x's por la invocación de splice.
en lo personalmente, prefiero el método sort. sort me permite indicar la condición y ésta se encarga de ordenar el array. es mucho más cómodo y simple.
Código:
var array = [
["10001","2","10121952","3"],
["10002","5","15121955","6"],
["10003","8","23081947","9"]
];
array.sort(function(a, b){
// formatear string para Date.parse ;
a = a[2].match(/(\d{2})(\d{2})(\d{4})/).reverse();
b = b[2].match(/(\d{2})(\d{2})(\d{4})/).reverse();
a.pop(), b.pop();
return Date.parse(a.join('/')) - Date.parse(b.join('/'));
});
console.log(array.toString());
Muchas gracias zerokilled, tu post es esclarecedor. Me pondré a estudiarlo en detalle, tanto la solución tuya en respuesta al método casero, como la función sort (tienes razón: ¿por qué no utilizar la rueda que inventaron otros? Y es que me has dado tranquilidad: "esta rueda" es de las buenas).
Cuando resuelva el código de arriba con las sugerencias de zerokilled postearé el definitivo para quien pueda interesar. La solución con sort supongo que ya la gente la conoce.
Mil gracias nuevamente zero. |