Быстро стабильная реализация алгоритма сортировки в JavaScript

сам похож этот ключевое слово в Java. Это - ссылка на текущий экземпляр объекта. Если бы Ваш типовой кодекс выполняет операцию на текущем объекте, то Вам, вероятно, была бы нужна функция без сам method_name спецификатор.

96
задан William Casarin 15 September 2009 в 14:40
поделиться

2 ответа

Можно получить стабильную сортировку из нестабильной функции сортировки.

Перед сортировкой вы получите положение всех элементов. В вашем состоянии сортировки, если оба элемента равны, то вы сортируете по позиции.

Тада! У вас есть конюшня.

Я написал статью об этом в моем блоге, если вы хотите узнать больше об этой технике и как его реализовать: http://blog.vjeux.com/2010/javascript/javascript-sorting- table.html

112
ответ дан 24 November 2019 в 05:37
поделиться

Поскольку вы ищете что-то стабильное, вам подойдет сортировка слиянием.

http://www.stoimen.com/blog/2010/07/02/friday-algorithms-javascript-merge-sort/

Код можно найти на указанном выше веб-сайте:

function mergeSort(arr)
{
    if (arr.length < 2)
        return arr;

    var middle = parseInt(arr.length / 2);
    var left   = arr.slice(0, middle);
    var right  = arr.slice(middle, arr.length);

    return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right)
{
    var result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());

    return result;
}

РЕДАКТИРОВАТЬ:

Согласно этому сообщению , похоже, что Array.Sort в некоторых реализациях использует сортировку слиянием.

32
ответ дан 24 November 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: