Algorithm 基于分数的排序
我有一个1D数组,包含一组排名。e、 g 0 | 0Algorithm 基于分数的排序,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 请注意,当出现平局时,索引保持数字升序。要做到这一点,我应该采用哪种算法?您需要的是一种“稳定”的排序算法,它不会对比较相等的元素重新排序。你没有说你正在使用什么语言或工具集,所以我不能告诉你具体要使用什么。不稳定性是某些算法的固有特征,其他算法可以以稳定或不稳定的形式实现。通常,如
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
正如其他海报所回答的,你可能想要一种稳定的。稳定的排序算法包括
- 如果等级相等,则声称数字标记越大的项目越大
- 如果等级不相等,则声称等级较高的项目为“较大”
- 如果秩和数字索引都相等,则表示它们相等
此函数所遵循的精确协议因语言而异。正如其他海报所回答的,您可能需要一个稳定的排序。稳定的排序算法包括
- 如果等级相等,则声称数字标记越大的项目越大
- 如果等级不相等,则声称等级较高的项目为“较大”
- 如果秩和数字索引都相等,则表示它们相等
此函数遵循的精确协议因语言而异。Hmm。。稳定重要吗 这不是排名吗 如果数据除了秩之外还有其他属性,我们最好在比较操作中包含这些属性
稳定排序会导致不必要的性能损失,增加复杂性。Hmm。。稳定重要吗 这不是排名吗 如果数据除了秩之外还有其他属性,我们最好在比较操作中包含这些属性
稳定排序可能会导致不必要的性能损失,增加复杂性。这应该是一个语言特定的问题,而不是什么通用算法。这应该是一个语言特定的问题,而不是什么通用算法。最后一句话不对。稳定性通常是排序算法的一个函数,例如mergesort是稳定的,而quicksort不是。最后一句话不正确。稳定性通常是排序算法的一个函数,例如mergesort是稳定的,而quicksort不是。谢谢你的回答。我正在使用Java并查看它使用的实现,它似乎是mergesort.+1<代码>我记得读到过一个例子,冒泡排序并不可怕:如果列表已经排序,那么冒泡排序是最好的算法。谢谢你的回答。我正在使用Java并查看它使用的实现,它似乎是mergesort.+1<代码>我记得读过一篇文章,其中冒泡排序并不可怕:如果列表已经排序,那么冒泡排序是最好的算法。