Сортировка, которая знает об уникальном способе представления Javascript массивов - PullRequest
5 голосов
/ 20 июня 2011

Я заметил, что функция сортировки Javascript чрезвычайно медленная в версиях Internet Explorer ниже 9 (часто на порядок по сравнению с Firefox и другими. Я реализую свою собственную версию, чтобы посмотреть, смогу ли я добиться большего успеха.Сортировка слиянием работает прилично, но кажется, что большая часть документации для алгоритмов сортировки предполагает, что массивы реализованы как непрерывные блоки памяти. Массивы Javascript реализованы как объекты (по крайней мере, в старых браузерах).

Мне было интересноЕсть ли алгоритм сортировки, который учитывает тот факт, что доступ к массиву является более дорогим, чем обычно? То есть тот, который пытается оптимизировать не только количество сравнений, но также число обращений и стоимость создания новых массивов с помощьютакие вещи, как splice и slice. Вот моя попытка сортировки слиянием.

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;
}

1 Ответ

0 голосов
/ 21 июня 2011

попробуйте функцию сортировки Web SQL. Думаю, это быстрее, чем родная сортировка, доступная в Javascript. Если вы пишете код, который поддерживает кросс-браузерную совместимость, сортировка слиянием - хороший вариант для использования, но отметьте http://www.cs.princeton.edu/~rs/strings/ .. Это говорит об использовании амальгамы быстрой и радикальной сортировки.

И если вы сможете получить отсортированные данные с сервера, это будет лучшим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...