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 Bubblesort优于其他排序算法?_Algorithm_Sorting_Bubble Sort - Fatal编程技术网

Algorithm Bubblesort优于其他排序算法?

Algorithm Bubblesort优于其他排序算法?,algorithm,sorting,bubble-sort,Algorithm,Sorting,Bubble Sort,为什么选择气泡排序而不是其他排序算法 我怀疑这是个骗人的问题。在一般情况下,没有人会选择冒泡排序而不是其他排序算法。它唯一真正有意义的时候是当你几乎肯定输入已经(几乎)排序了。你不会 杜克大学的欧文·阿斯特拉坎曾写道并引用CS传奇人物唐·克努特的话 简言之,除了一个吸引人的名字外,泡沫类似乎没有什么值得推荐的 事实上,这导致了一些有趣的理论问题 本文最后得出结论 在这篇论文中,我们调查了冒泡排序的起源和它的持久流行,尽管许多专家警告说它不被使用。我们通过分析其编码和运行时的复杂性来确认警告 气泡

为什么选择气泡排序而不是其他排序算法

我怀疑这是个骗人的问题。在一般情况下,没有人会选择冒泡排序而不是其他排序算法。它唯一真正有意义的时候是当你几乎肯定输入已经(几乎)排序了。

你不会

杜克大学的欧文·阿斯特拉坎曾写道并引用CS传奇人物唐·克努特的话

简言之,除了一个吸引人的名字外,泡沫类似乎没有什么值得推荐的 事实上,这导致了一些有趣的理论问题

本文最后得出结论

在这篇论文中,我们调查了冒泡排序的起源和它的持久流行,尽管许多专家警告说它不被使用。我们通过分析其编码和运行时的复杂性来确认警告

气泡排序比其他O(n2)排序慢;它的速度大约是插入排序的四倍,是选择排序的两倍。它确实具有良好的最佳情况行为,但在几乎所有真实数据集上速度都很慢。任何好的quicksort、heapsort或mergesort实现都可能大大超过它


而且,它对于学校里的“婴儿第一类”练习很有用,因为它很容易解释它是如何工作的,也很容易实施。一旦你写了它,也许运行过一次,删除它,再也不想它了。

如果你需要一个保证稳定且内存占用非常小的排序算法,我想你会选择冒泡排序。基本上,如果系统中的内存真的很稀少(性能不是问题),那么它就可以工作,并且任何支持代码的人都可以很容易地理解它。如果您提前知道值大部分已经排序,这也会有所帮助

即使在这种情况下,插入排序也可能更好


如果这是一个骗人的问题,下一次建议作为替代方案。毕竟,如果他们在寻找糟糕的排序,那就是正确的选择。

因为你的另一种排序算法是?;)


严肃地说,冒泡排序主要是出于教育原因的排序算法,没有实用价值。

当以下所有条件都满足时


  • 实现速度比执行速度更重要(概率气泡排序很容易实现。虽然“标准”实现的性能较差,但与许多其他简单算法相比,有一个非常简单的优化使得它成为一个强有力的竞争者。谷歌“combsort”,并看到了一些放得好的行的魔力。Quicksort仍然优于此,但实现起来不那么明显需要一种支持递归实现的语言。

    如果你只是想快速尝试一些东西,你可以使用Bubblesort。例如,如果你在一个新的环境中,你正在玩弄一个新的想法,你可以在很短的时间内快速加入一个bubble排序。你可能需要更长的时间来记住和编写一个如果你的实验成功了,你需要用这些代码来做一些真实的事情,那么你可以花些时间来做正确的事情


    如果只是进行原型设计,那么在排序算法上投入大量精力是没有意义的。

    在用具体示例演示如何不实现排序例程时。

    如果数据位于向前读取速度快、向后查找速度慢、倒带速度快的磁带上(或者是一个循环,因此不需要倒带),那么bubblesort将执行得非常好。

    有一种情况下,冒泡排序是最佳的,但这种情况只有在古老的硬件中才能真正发生(基本上,类似于具有两个磁头的磁鼓存储器,您只能按顺序读取数据,并且只能处理磁鼓上相邻的两个数据项)


    除此之外,它是完全无用的,我认为。即使是快速启动和运行某些东西的借口也是毫无意义的,至少在我看来是这样。选择排序或插入排序更容易编写和/或理解。

    如果需要创建冒泡排序,您可以实现冒泡排序。

    我可以想到冒泡排序的几个原因:

  • 这是一种基本的基本类型。对于初学者学习if、for和while语句非常有用

  • 我可以想象程序员有一些空闲时间来试验各种排序是如何工作的。有什么比冒泡排序(是的,这确实降低了它的排名,但如果有人说“排序算法”,谁不认为“冒泡排序”更好呢?)

  • 对于任何算法,都非常容易记忆和使用

  • 当我开始使用链表时,冒泡排序帮助我了解了所有节点如何彼此良好地工作

  • 现在我感觉自己像一个蹩脚的关于泡泡排序的商业广告,所以我现在会安静下来


  • 当数组已经“几乎”排序或者已经排序的列表中几乎没有添加内容时,可以使用冒泡排序。冒泡排序通常适用于小数据集。

    如果您喜欢等待较慢的算法完成?:)当bogosort不够快时?:-)建议面试官集中排序。如果100万人同时对一条记录进行排序,那么整个数组将很快被排序!我认为这个问题基本上与…相同,即使这样,你也可能会更好地使用插入排序!继维基百科上的Bogosort之后,我发现了这样一句精彩的话:“H.Gruber对糟糕透顶的随机排序算法的分析。”@Chris Walton:我仍然喜欢上面评论中的众源观点。我不得不建议,在我的工作中,在某个时候,看看是否有人在听或只是在寻找流行语:)有很多现成的排序算法