对阵列执行手动排序

时间:2009-05-16 17:51:45

标签: arrays sorting

我正在使用OpusScript,它与Javascript非常相似。

我需要通过其中对象的两个属性对Array进行排序。

数组的对象类型是“ScoreEntity”,其属性为Score和Time。我需要在数组的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 个答案:

答案 0 :(得分:1)

您选择了algorithm吗? (QuickSort很好)

你必须定义一个比较函数来确定哪个ScoreEntity更少(通过比较得分和时间),然后才实现算法。

(我不知道OpusScript - 也许你可以使用你告诉comparsion谓词的内置排序)