让我们说我们有项目清单,每个项目都有(未知)属性数量。按单个属性排序是一种简单的排序算法。 问题是:如何按所有属性对相同的列表排序进行排序? 每个属性都有一个权重,所以我们可以先用最不重要的属性排序,然后用更稳定的排序算法等更重要的属性排序,但这显然效率不高。
感谢。
答案 0 :(得分:11)
SORT BY A,B,C
您在排序中的比较将: A,B,C是从最高到最低的亲和力
这可以通过简单的循环外推到A..n标准。
以上两者都假设您的比较功能是比较(Element1,Element2)
答案 1 :(得分:5)
创建一个函数f:A1xA2x ..-> R [即根据优先级和属性为每个元素赋值。该函数非常依赖于属性[例如,如果属性值在范围(0,9)内,则给出的值很简单:Sigma[val(i)*10^prio(i)] for each attribute i
。
迭代列表,计算函数值,并缓存此函数结果,并根据它进行排序。复杂度为O(nk + nlogn),其中k是属性数,n是元素数。
答案 2 :(得分:1)
大多数排序算法可以将单个比较函数作为输入,可以组合多个排序标准。
最后,为了能够进行排序,所有元素之间必须存在单个排序关系(例如,A肯定在元素B之前,反之亦然,或者两者是等价的;关系必须满足传递/对称/反身属性),这意味着在给定有效比较函数的情况下,必须能够通过排序算法的一次传递进行排序。