Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/10/2013, 17:34
Profesor_Lambetain
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 14 años, 2 meses
Puntos: 1
Algoritmo para ordenar matriz sin usar método .SORT, pero con problema.

Hola foreros,
Tengo un problemilla con esta sencilla rutina, y desde hace dos días que no puedo encontrar el fallo.

Se trata de una serie de vectores (p1 a p3) que conforman una matriz (perhermanos). Los elementos [2] de los vectores (elementos [i][2] de matriz perhermanos) son fechas en formato DDMMAAAA. Necesito ordenar dichos vectores dentro de perhermanos por fecha creciente (esto es: de más antigua a más reciente). Por razones que no vienen al caso, no puedo usar el método .sort del objeto Array. Para ello he escrito el siguiente código:

1. Trabajo con fechas redefinidas al formato AAAAMMDDXX, donde XX son los últimos dos dígitos de los elementos [0] de los vectores p.
1. Un for interior (índice i) detecta qué fecha es la más antigua dentro de matriz perhermanos.
2. A ese vector lo transfiero al final de la matriz perhermanosbis mediante el método .push.
3. Para no volver a detectar ese mismo vector de perhermanos en ciclo for externo posterior (índice j), le cambio el valor al elemento [2] del vector transferido a perhermanosbis (mediante la instrucción perhermanos[mayor][2]="xxxxxxxx";).
4. Supuestamente, con este código, al finalizar ambos bucles for, tendría que obtener la matriz perhermanosbis ordenada por fechas, y la matriz original perhermanos con todos sus elementos [i][2] iguales a "xxxxxxxx".

Pues no: obtengo los elementos [2] de los vectores de perhermanosbis iguales a "xxxxxxxx" también. Sé que el cambio de la fecha "DDMMAAAA" a "xxxxxxxx" en perhermanosbis ocurre ejecutando la instrucción perhermanos[mayor][2]="xxxxxxxx"; , pero esta instrucción no debería cambias perhermanosbis sino sólo perhermanos (como lo hace).

Sinceramente no sé dónde está el fallo, sé que será una tontería, pero no lo puedo hallar. A ver si algún forero puede verlo. Gracias anticipadas.

Código HTML:
<?xml version="1.0" encoding="UTF-8"?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>

<html xmlns=http://w3.org/1999/xhtml xml:lang="en">
<head>
<script type="text/javascript">
function arbol(){
	var p1=new Array("10001","2","10121952","3");
	var p2=new Array("10002","5","15121955","6");
	var p3=new Array("10003","8","23081947","9");
	var perhermanos=new Array(p1,p2,p3);
	var s=3;
	var perhermanosbis=new Array();

	var mayor=0;
	for(j=1;j<=s;j++){
		fechamasantigua="9999999999";
		for(i=0;i<=perhermanos.length-1;i++){
			fechaactual=perhermanos[i][2].substr(4,4)+perhermanos[i][2].substr(2,2)+perhermanos[i][2].substr(0,2)+perhermanos[i][0].substr(3,2);
			if(fechaactual<fechamasantigua && fechaactual.substr(0,8)!="xxxxxxxx"){
				fechamasantigua=fechaactual;
				mayor=i;
			}else{
				continue;
			}
		} // Fin for.
		perhermanosbis.push(perhermanos[mayor]);
// alert(mayor);
alert(perhermanosbis);
		perhermanos[mayor][2]="xxxxxxxx";
alert(perhermanosbis);
	} // Fin for.
} // Fin function arbol.
</script>
</head>

<body style="background-color:#FFFFFF" onLoad="javascript:arbol();">
Esto es una prueba...
</body>
</html>