Выполнение ручной сортировки на массиве - PullRequest
0 голосов
/ 16 мая 2009

Я использую OpusScript, который очень похож на Javascript.

Мне нужно отсортировать массив по двум свойствам объектов в нем.

Тип объекта массива - «ScoreEntity» со свойствами «Оценка» и «Время». Мне нужен наивысший балл по индексу 0 массива, и наоборот, с более быстрым переопределением совпадений.

Я пытался делать это целую вечность, и я не могу обдумать это, у меня синдром Субботы!

ОТВЕТ:

В конце я использовал BubbleSort, любые комментарии по улучшению этого приветствуются.

function SortScoreArray(array)
{

    var unsorted = true
    while (unsorted)
    {

        // Tracks whether any changes were made, changed to false on any swap
        var complete = true
        for (var i = 0; i < array.length - 1; i++)
        {           

            // Holds the value for determining whether to swap the current positions
            var swap = false

            var currentItem = array[i]
            var nextItem = array[i + 1]

            if (currentItem.Score == nextItem.Score)
            {

                // The scores are the same, so sort by the time
                if (currentItem.Time > nextItem.Time)
                {
                    swap = true
                }

            }
            else if (currentItem.Score < nextItem.Score)
            {
                swap = true
            }


            if (swap)
            {
                array[i] = nextItem
                array[i + 1] = currentItem
                complete = false
            }

        }

        if (complete)
        {
            unsorted = false
        }

    }

    return array

}

1 Ответ

1 голос
/ 16 мая 2009

Вы выбрали алгоритм ? (Быстрая сортировка хороша)

Вы должны определить функцию сравнения, определяющую, какая ScoreEntity меньше (сравнивая счет и время), а затем просто реализовать алгоритм.

(я не знаю OpusScript - может быть, вы можете просто использовать встроенную сортировку, которую вы говорите предикату сравнения)

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