我们什么时候喜欢
a)桶排序,和b)基数排序
比较像
这样的排序答案 0 :(得分:2)
数学家会认为大多数种类在O(n log(n))或O(n²)时间运行,其中RadixSort在O(n)时间内运行。 - source
Bucket sort是基数排序的表亲,具有最重要的数字风格。 - source
优点: - copied from source
基数和桶分类是稳定的,保留了相等键的现有顺序。
与大多数其他种类不同,它们在线性时间内工作。换句话说,当需要对大量物品进行分类时,它们不会陷入困境。大多数排序在O(n log n)或O(n ^ 2)时间内运行。
每个项目的排序时间是不变的,因为不会对项目进行比较。对于其他类别,每次排序的时间随着项目数量的增加而增加。
当你有大量记录要用短键排序时,基数排序特别有效。
答案 1 :(得分:2)
当您必须对数字进行排序 时,优选基数排序,通常是符合32/64位整数的自然数(如果更少,请考虑计算排序) 。这是因为它更快,执行约k*N
次操作,其中k
是常量(换句话说,O(N)
时间)。对于32位整数,k
通常为2或4。
当你必须对较小的集合进行排序时,没有必要为基数排序及其亲属而烦恼。在这些情况下,优化的快速排序(阅读:introsort)会更快。此外,如果您要对自定义数据类型进行排序,甚至可能无法使用基数排序,因此您别无选择,只能使用比较排序。
如果您不确定哪个更快(并且有时难以确定),请运行测试。始终考虑输入已经排序,反向排序和随机顺序的情况。考虑每种算法的内存要求,并做出相应的选择。
答案 2 :(得分:0)
这听起来很像家庭作业问题,所以我不想说太多。
冒泡排序是一种非常简单的排序算法,它遍历列表中的所有项目,并将其与其他项目进行比较。这导致了很多比较,因此非常缓慢。
基数排序是基于数字排序的,但您可以用数字表示任何数据,它和存储桶可以提供更快的结果。
插入/选择/合并排序旨在执行这些任务。例如,当合并到列表时,如果要求对两个列表进行预排序,则可以使用特殊排序快速合并它们,而不是将整个列表排序为一个。如果您知道两个列表都是有序的,您只需要跟踪每个列表中的位置(两个索引号)并比较每个索引处的元素,并在您取出其中一个项目并移动它时将索引向上移动进入新名单。
排序算法是一个巨大的计算领域,因为有许多不同的要求。我描述的合并很容易编码,但在排序时,使用的内存加倍。你可能也可以让它运行得更快。也许从两端开始,跟踪两个索引,两个半合并的lits,一个从底部到中间,另一个从顶部到中间,然后将第二个连接到第一个......可能工作得更好我不知道。