使用哪种多标准排序算法?

时间:2011-09-15 13:27:56

标签: algorithm sorting

让我们说我们有项目清单,每个项目都有(未知)属性数量。按单个属性排序是一种简单的排序算法。 问题是:如何按所有属性对相同的列表排序进行排序? 每个属性都有一个权重,所以我们可以先用最不重要的属性排序,然后用更稳定的排序算法等更重要的属性排序,但这显然效率不高。

感谢。

3 个答案:

答案 0 :(得分:11)

SORT BY A,B,C

您在排序中的比较将: A,B,C是从最高到最低的亲和力

  • 将元素1的A与元素2的A进行比较
    • 如果返回结果大于或小于
    • 其他比较B
      • 如果返回结果大于或小于
      • 其他比较C返回结果

这可以通过简单的循环外推到A..n标准。

  • 对于标准列表中的每个标准
    • 将元素1的标准与元素2的
    • 进行比较
      • 如果返回结果大于或小于
      • 其他继续//为清晰起见
  • 返回平等

以上两者都假设您的比较功能是比较(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之前,反之亦然,或者两者是等价的;关系必须满足传递/对称/反身属性),这意味着在给定有效比较函数的情况下,必须能够通过排序算法的一次传递进行排序。