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