Algorithm 基于分数的排序

Algorithm 基于分数的排序,algorithm,sorting,Algorithm,Sorting,我有一个1D数组,包含一组排名。e、 g 0 | 0 1 | 2 2 | 2 3|1 4|0 5 | 1 (此处显示的第一列是数组索引) 我想这样排名 1 | 2 2 | 2 3|1 5|1 0 | 0 4 | 0 请注意,当出现平局时,索引保持数字升序。要做到这一点,我应该采用哪种算法?您需要的是一种“稳定”的排序算法,它不会对比较相等的元素重新排序。你没有说你正在使用什么语言或工具集,所以我不能告诉你具体要使用什么。不稳定性是某些算法的固有特征,其他算法可以以稳定或不稳定的形式实现。通常,如

我有一个1D数组,包含一组排名。e、 g

0 | 0
1 | 2
2 | 2
3|1
4|0
5 | 1

(此处显示的第一列是数组索引)

我想这样排名

1 | 2
2 | 2
3|1
5|1
0 | 0
4 | 0


请注意,当出现平局时,索引保持数字升序。要做到这一点,我应该采用哪种算法?

您需要的是一种“稳定”的排序算法,它不会对比较相等的元素重新排序。你没有说你正在使用什么语言或工具集,所以我不能告诉你具体要使用什么。不稳定性是某些算法的固有特征,其他算法可以以稳定或不稳定的形式实现。通常,如果可能的话,库排序算法将选择一个稳定的实现。

您需要的是一个“稳定”的排序算法,它不会对比较相等的元素重新排序。你没有说你正在使用什么语言或工具集,所以我不能告诉你具体要使用什么。不稳定性是某些算法的固有特征,其他算法可以以稳定或不稳定的形式实现。通常,如果可能,库排序算法将选择一个稳定的实现。

不知道它有多高效或好,但是:

// suppose you have scores[n]

for c1 = 1 to n
    for c2 = c1 + 1 to n
        if scores[c2]>scores[c1] then swap them

不知道它有多高效或好,但是:

// suppose you have scores[n]

for c1 = 1 to n
    for c2 = c1 + 1 to n
        if scores[c2]>scores[c1] then swap them

正如其他海报所回答的,你可能想要一种稳定的。稳定的排序算法包括

如果让我选择,我可能会选择合并排序,因为它具有最好的复杂性。不过,插入排序可以在小列表上击败它。我记得读到过一个例子,气泡排序并不可怕,但我忘了它是什么

但是,值得注意的是,担心稳定性会排除像quicksort这样的算法,这可能是您未指定的语言在其排序函数中使用的算法

无论您使用哪种语言,它的排序实现都应该能够使用一个函数来比较两个项目,并确定哪一个“更大”。所以你真正需要做的就是写一个函数

  • 如果等级相等,则声称数字标记越大的项目越大
  • 如果等级不相等,则声称等级较高的项目为“较大”
  • 如果秩和数字索引都相等,则表示它们相等
<>这只是对字典中的项目进行排序,使用任何一种带有语言的排序算法,如果你认为如果两个项目具有相同的索引,就可以考虑两个项目是相等的。
此函数所遵循的精确协议因语言而异。

正如其他海报所回答的,您可能需要一个稳定的排序。稳定的排序算法包括

如果让我选择,我可能会选择合并排序,因为它具有最好的复杂性。不过,插入排序可以在小列表上击败它。我记得读到过一个例子,气泡排序并不可怕,但我忘了它是什么

但是,值得注意的是,担心稳定性会排除像quicksort这样的算法,这可能是您未指定的语言在其排序函数中使用的算法

无论您使用哪种语言,它的排序实现都应该能够使用一个函数来比较两个项目,并确定哪一个“更大”。所以你真正需要做的就是写一个函数

  • 如果等级相等,则声称数字标记越大的项目越大
  • 如果等级不相等,则声称等级较高的项目为“较大”
  • 如果秩和数字索引都相等,则表示它们相等
<>这只是对字典中的项目进行排序,使用任何一种带有语言的排序算法,如果你认为如果两个项目具有相同的索引,就可以考虑两个项目是相等的。
此函数遵循的精确协议因语言而异。

Hmm。。稳定重要吗

这不是排名吗

如果数据除了秩之外还有其他属性,我们最好在比较操作中包含这些属性


稳定排序会导致不必要的性能损失,增加复杂性。

Hmm。。稳定重要吗

这不是排名吗

如果数据除了秩之外还有其他属性,我们最好在比较操作中包含这些属性


稳定排序可能会导致不必要的性能损失,增加复杂性。

这应该是一个语言特定的问题,而不是什么通用算法。这应该是一个语言特定的问题,而不是什么通用算法。最后一句话不对。稳定性通常是排序算法的一个函数,例如mergesort是稳定的,而quicksort不是。最后一句话不正确。稳定性通常是排序算法的一个函数,例如mergesort是稳定的,而quicksort不是。谢谢你的回答。我正在使用Java并查看它使用的实现,它似乎是mergesort.+1<代码>我记得读到过一个例子,冒泡排序并不可怕:如果列表已经排序,那么冒泡排序是最好的算法。谢谢你的回答。我正在使用Java并查看它使用的实现,它似乎是mergesort.+1<代码>我记得读过一篇文章,其中冒泡排序并不可怕:如果列表已经排序,那么冒泡排序是最好的算法。