假设我们有一个项目列表,每个项目都有(未知)数量的属性。按单个属性排序是一种简单的排序算法。
问题是:如何按所有属性排序相同的列表?
每个属性都有一个权重,因此我们可以使用稳定排序算法首先按最不重要的属性排序,然后按更重要的属性排序,依此类推,但这显然是不高效的。
谢谢。
谢谢。
SORT BY A,B,C
您在排序内的比较方式将为:
这个方法可以扩展到A..n个标准,只需要使用一个简单的循环即可:
以上两种方法都假设您的比较函数是Compare(Element1, Element2)。
对于每个属性i,Sigma[val(i)*10^prio(i)]
]。prio(i)
是第 i 个属性的优先级,其中 i=0 在此示例中最不重要。 - amita,b,c
的对象,其中a
最为重要,而c
最不重要,并且每个属性都在[0,9]范围内,您可以给它赋值val(a)*100 + val(b) * 10 + val(c)
。因此,如果您有一个a=3,b=0,c=9
的对象,则得到的数字为309。现在,您可以使用常规排序算法根据这个数字对所有对象进行排序。 - amit大多数排序算法都可以接受一个输入的比较函数,该函数可以组合多个排序标准。
最终,为了能够进行排序,所有元素之间必须存在单一的排序关系(例如,A绝对领先于元素B,或者反之,或者两者相等;关系必须满足传递性/对称性/自反性),因此这意味着在给定有效的比较函数的情况下,必须可以使用一次排序算法进行排序。