Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/10/2013, 08:21
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Algoritmo para ordenar matriz sin usar método .SORT, pero con problema.

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());
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.