如何使用TimSort按多个字段排序?

时间:2019-05-06 12:29:31

标签: algorithm sorting timsort

我已经实现了TimSort,但是我确实需要能够按不同的字段进行排序。例如。按字段2排序,然后按1排序,然后按3排序。我通常知道如何执行此操作,如果先前给定的要排序的字段相等,则按下一个字段进行排序,但是我正在寻找一种具有更多详细信息和特别是对于TimSort。

1 个答案:

答案 0 :(得分:0)

使用多个字段进行排序的事实仅会影响比较功能,而不会影响所使用的排序算法。
要对对象进行排序,您需要能够比较它们。一种简单的方法是实现一个函数isSmaller,该函数将两个对象作为参数,如果第一个小于第二个,则返回true。

函数isSmaller如下所示,具有您指定的条件:

function isSmaller(object1, object2) -> boolean {
    if object1.field2 < object2.field2 {
        return true
    } else if object1.field2 > object2.field2 {
        return false
    } else {                           // equality on first criterion -> check the second
        if object1.field1 < object2.field1 {
            return true
        } else if object1.field1 > object2.field1 {
            return false
        } else {                      // equality again -> check 3rd criterion
            if object1.field2 < object2.field3 {
                return true
            } else if object1.field2 > object2.field3 {
                return false
            } else {                 // equality on all criteria -> can return true or false
                return true
            }
        }
    }
}

然后您要做的就是使用它来比较Timsort实施中的对象。