Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 应该使用哪种排序算法以O(n)形式运行?_Algorithm_Sorting_Big O - Fatal编程技术网

Algorithm 应该使用哪种排序算法以O(n)形式运行?

Algorithm 应该使用哪种排序算法以O(n)形式运行?,algorithm,sorting,big-o,Algorithm,Sorting,Big O,我很难找出哪种算法最适合某些规范 提示如下: 编写一个算法,对n个整数进行排序,每个整数的范围为 [0.((n^4)-1)]在O(n)时间内。 我更多的是一个视觉学习者,通过例子最能理解。我为这个设置了一些值来可视化它,但我不知道该使用什么排序方法,也不知道如何确定该使用哪种排序方法。任何提示或建议都将不胜感激。谢谢 据我所知,没有在O(n)中运行的排序算法,冒泡排序在O(n^2)中运行。快速排序运行在O(n logn)基数排序是我所知道的唯一可以在线性时间内运行的排序算法 这里有一个链接应该很

我很难找出哪种算法最适合某些规范

提示如下:

编写一个算法,对n个整数进行排序,每个整数的范围为 [0.((n^4)-1)]在O(n)时间内。


我更多的是一个视觉学习者,通过例子最能理解。我为这个设置了一些值来可视化它,但我不知道该使用什么排序方法,也不知道如何确定该使用哪种排序方法。任何提示或建议都将不胜感激。谢谢

据我所知,没有在O(n)中运行的排序算法,冒泡排序在O(n^2)中运行。快速排序运行在O(n logn)

基数排序是我所知道的唯一可以在线性时间内运行的排序算法


这里有一个链接应该很有帮助-

正如我在评论中所说的,就我所知,实现这一点的唯一方法是。基本上,通过分别比较每个数字来对数字进行排序

该算法的全部复杂度为O(d(n+b)),其中b是所选的基数,d是该基数中的位数。你几乎可以选择任何一个基数,并在该基数中使用数字

这里的诀窍是选择正确的基础。存在一个使算法O(n)的基数,但如果只使用基数2,每个数字将最多有O(4 logn)位数,因此总复杂度将是O(n logn)


作为提示,存在一个基数,在此基数范围内的每个数字都有一个恒定的位数。

冒泡排序和插入排序不会在O(n)中运行(特殊情况除外),而是在基数排序上读取。你可以用你选择的基础做一个技巧。就我所知,这是唯一的方法,顺便问一下。谢谢。我如何确定要使用的基数值?如果你仔细看,你会发现基数排序是O(nlog_10(n))。那么基数是什么?我不会明确地说,因为这似乎是一个家庭作业问题。几乎只有一种方法可以选择范围内的数字具有恒定位数的基数。就像我说的,这有点棘手。你不是说base
n
,对吧?因为这真的是一个骗局,除非你把它算作O(logn),但这会让你回到使用常数的情况base@harold我怀疑运营成本是O(1)。有了你的解释,你甚至无法读取O(n)中的输入数据,所以这个问题显然是不可能的。不过,基数n不是唯一的选择,例如,sqrt(n)也可以很好地工作,但不能避免您的批评。是的,随机存取机器的现代惯例是对机器字(至少有日志位)进行单位成本运算。