5

Me he dado cuenta de que la función de clasificación de Javascript es extremadamente lenta en las versiones de Internet Explorer inferiores a 9 (a menudo en un orden de magnitud en comparación con Firefox y otros). mi propia versión para ver si puedo hacerlo mejor. Merge Sort funciona decentemente, pero parece que la mayoría de la documentación para clasificar algoritmos supone que las matrices se implementan como bloques contiguos de memoria. Las matrices Javascript se implementan como objetos (al menos en navegadores antiguos))Clasificación que conoce la forma única en que Javascript representa las matrices

Me preguntaba, ¿hay algún algoritmo de clasificación que tenga en cuenta que el acceso a arreglos es más caro que lo habitual? Es decir, uno que trata de optimizar no solo el número de comparaciones, sino también el número accesos y el costo de crear ne w arrays a través de cosas como splice y slice. Aquí está mi intento de fusionar el género.

function mergeSort(array, compareFunc) { 
    if (array.length <= 1) { 
     return; 
    } 
    var mid = Math.floor(array.length/2); 
    var left = array.splice(0, mid); 
    var right = array.splice(0, array.length); 
    mergeSort(left, compareFunc); 
    mergeSort(right, compareFunc); 

    while ((left.length > 0) && (right.length > 0)) 
    { 
     if (compareFunc(left[0], right[0]) <= 0) { 
      array.push(left.shift()); 
     } 
     else { 
      array.push(right.shift()); 
     } 
    } 
    while (left.length > 0) { 
     array.push(left.shift()); 
    } 
    while (right.length > 0) { 
     array.push(right.shift()); 
    } 
    return; 
} 
+0

No es una respuesta directa a su pregunta, pero esos dos bucles en la parte inferior realmente deberían ser 'concat's. – Josh

Respuesta

0

prueba Web SQL sort function. Creo que es más rápido que el género nativo disponible en Javascript. Si está escribiendo un código que admita la compatibilidad de varios navegadores, combinar es un buen método para usar, pero consulte http://www.cs.princeton.edu/~rs/strings/ .. Esto le informa sobre el uso de una amalgama de clasificación rápida y ordenación de radix.

Y si puede obtener los datos ordenados del servidor, ese sería el mejor método.

Cuestiones relacionadas