![]() |
Tiempo utilizado en ordenar un array Hola a todos, Tengo un servlet que tiene un array y lo que hago es ordenarlo. Tengo una plataforma de desarrollo y otra de producción. Lo estoy problando en 2 maquinas diferentes. En una de las máquinas (que tiene menos procesador que el otro) tarda 2 segundos mientras que en el otro (que es tiene más memoria RAM y más procesador) tarda 23 segundos. Los array tienen 7000 elementos. El código es el siguiente: ///////////////////////////////////////////////////////////////////////////*/////////////////////////////// java.util.Date datTiempoInicio, datTiempoFin; java.util.Calendar calTiempoInicio = Calendar.getInstance(); java.util.Calendar calTiempoFin = Calendar.getInstance(); long intTiempoUtilizado; datTiempoInicio = new java.util.Date(); calTiempoInicio.setTime(datTiempoInicio ); if (astrName.length > 1) { //ordenacion de los arrays: astrName[intFilaArray] int i, pasadas; String strTemp; double dblIntensityTemp; double dblBackgroundTemp; int intComparacion; for (pasadas = 1; pasadas < astrName.length; pasadas++) { for (i = 0; i<astrName.length - 1; i++) { intComparacion = astrName[i].compareTo(astrName[i+1]); if (intComparacion > 0) { strTemp = astrName[i]; astrName[i] = astrName[i + 1]; astrName[i + 1] = strTemp; dblIntensityTemp = adblIntensity1[i]; adblIntensity1[i] = adblIntensity1[i + 1]; adblIntensity1[i + 1] = dblIntensityTemp; dblIntensityTemp = adblIntensity2[i]; adblIntensity2[i] = adblIntensity2[i + 1]; adblIntensity2[i + 1] = dblIntensityTemp; dblBackgroundTemp = adblBackground1[i]; adblBackground1[i] = adblBackground1[i + 1]; adblBackground1[i + 1] = dblBackgroundTemp; dblBackgroundTemp = adblBackground2[i]; adblBackground2[i] = adblBackground2[i + 1]; adblBackground2[i + 1] = dblBackgroundTemp; } // end if (intComparacion > 0) } //end for i } //end for pasadas } // end if (astrName.length > 1) datTiempoFin = new java.util.Date(); calTiempoFin.setTime(datTiempoFin ); intTiempoUtilizado = Math.abs( (calTiempoFin.getTimeInMillis() - calTiempoInicio.getTimeInMillis()) / (1000) ); System.out.println("(ProcessFile) Time = " + intTiempoUtilizado ); ///////////////////////////////////////////////////////////////////////////*///////////////////// ¿Puede ser algo de la configuración que tengo diferente? ¿puede ser algo del metodo compareTo? Necesito ayuda, please. Gracias. |
depende de otros factores tambien: hay otros procesos corriendo al mismo tiempo? Usas la misma JVM? He notado que en Java 1.5 hay cierta mejora con respecto al rendimiento. |
Buenas, por que no utilizas otro algoritmo?? por lo que veo parece que estas utilizando el algoritmo de la burbuja no? y ese algoritmo es de orden cuadratico.. por que no utilizas el metodo sort() que proporciona Java? seguro que ganaras en rendimiento.. saludos. |
Hola, Yo no puedo utilizar el metodo Arrays.sort() ya que tengo los arrays interralacionados (fila con fila de cada array), es decir, si cambio cambio el orden del array astrName lo tengo que cabiar tambien en el adblBackground1, adblBackground2, adblIntensity1 y adblIntensity2. ANTES de ordenar: astrName adblBackground1 adblBackground2 adblIntensity1 adblIntensity2 -------- ---------------- --------------- ------------- ------------- "green" 4 8 7 5 "red" 6 7 6 7 "blue" 9 5 9 1 "black" 10 6 8 2 DESPUES DE ORDENAR debería de quedar así: astrName adblBackground1 adblBackground2 adblIntensity1 adblIntensity2 -------- ---------------- --------------- ------------- ------------- "black" 10 6 8 2 "blue" 9 5 9 1 "green" 4 8 7 5 "red" 6 7 6 7 La ordenación siempre es por astrName sólo se cambia las posiciones del resto de arrays si han cambiado las de astrName. Si cambio la posicion 1 en astrName las cambio también en el resto de arrays. Alguien me puede decir si existe una forma para hacer esto? Gracias. |
podrias poner los atributos en un objeto (color, numero1, numero2,...), y luego defines las reglas que definen el orden (en el objeto tienes que implementar la interface Comparable) , y luego le puedes pasar un array de esos objetos al metodo sort. |
Podrías ponerme un pequeño ejemplo de como puedo hacerlo, por favor? Gracias. |
class LaClase implements Comparable { String color; int numero1; int numero2; //inserta constructores, setters, getters, toString(), etc... /** Este es el metodo del la interface */ int compareTo(Object o){ //ejemplo, en tu caso creo que lo ordenas por el color, alfabeticamente LaClase tempClase = (LaClase)o; if (this.numero1>tempClase.numero1) return 1; if (this.numero1<tempClase.numero1) return -1; if (this.numero1==tempClase.numero1) return 0; } } luego creas los objetos con los parametros respectivos, los pones en un array, y luego pasas el array al Arrays.sort() ... o puedes implementar tu propio quicksort.... Mas info: http://java.sun.com/j2se/1.3/docs/ap...omparable.html Ciao, Willie |
| La zona horaria es GMT -6. Ahora son las 23:32. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.