基于分数排序

Pro*_*ish 1 sorting algorithm

我有一个包含一组排名的一维数组.例如

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

(这里显示的第一列是数组索引)

我喜欢这样排名

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

请注意,当存在平局时,索引将按数字递增顺序保留.我应该考虑采用什么样的算法?

aar*_*ing 5

正如其他海报所回答的那样,你可能想要一个稳定的分类.稳定的排序算法包括

如果我选择,我可能会选择合并排序,因为它具有最佳的复杂性.插入排序可以在小列表上击败它.我记得有一个案例,冒泡排序并不可怕,但我忘了它是什么.

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

无论你使用什么语言,它的排序实现应该能够采用一个函数来比较两个项目并确定哪个是"更大".所以你真正需要做的就是编写一个函数

  • 如果等级相等,则声称具有较大数字指数的项目为"更大"
  • 如果等级不相等,则声称具有更高等级的项目是"更大".
  • 如果等级和数字指数相等,则声称它们是相等的.

这只是使用语言附带的任何排序算法按字典顺序对项目进行排序,并且假设如果它们具有相同的索引,则可以认为两个项目相等,从而消除了对稳定性的需求.

该函数遵循的精确协议因语言而异.

  • +1.`我记得读过有一种情况,冒泡排序并不可怕.)如果列表已经排序,冒泡排序是最好的算法. (2认同)