为什么你会选择冒泡排序而不是其他排序算法?
答案 0 :(得分:19)
你不会。
杜克大学的Owen Astrachan曾写过a research paper tracing the history of bubble sort并引用CS传奇人物Don Knuth的话说
简而言之,除了一个吸引人的名字之外,泡泡排序似乎没有什么值得推荐的 而且这会导致一些有趣的理论问题。
论文最后以
结束在本文中,我们已经调查了泡沫分类的起源及其持久的受欢迎程度,尽管许多专家都在使用它。我们通过分析编码和运行时的复杂性来确认警告。
冒泡排序比其他O(n 2 )排序慢;它大约是插入排序的四倍,慢于选择排序的两倍。它确实具有良好的最佳案例行为,但几乎所有实际数据集都不切实际。 quicksort,heapsort或mergesort的任何良好实现都可能大幅超越它。
此外,the President of the United States says you shouldn't use it.
答案 1 :(得分:8)
满足以下所有条件时
你需要实现冒泡排序的可能性小于0,000099%,不到百万分之一。
答案 2 :(得分:8)
有一种情况是冒泡排序是最佳的,但它只能用古老的硬件才能真正发生(基本上,就像一个带有两个磁头的鼓存储器,你只能按顺序读取数据,并且只能工作两个数据项在鼓上直接相邻。)
除此之外,它完全没用,IMO。至少在我看来,即使是快速获取和运行的借口也是无稽之谈。选择排序或插入排序更容易编写和/或理解。
答案 3 :(得分:8)
如果您需要创建web page showing an animation of bubble sort in action,则可以实施冒泡排序。
答案 4 :(得分:5)
如果您的数据位于快速向前读取的磁带上,向后搜索速度慢,并且快速回放(或者是循环以便不需要倒带),那么bubblesort将表现得非常好。
答案 5 :(得分:3)
我怀疑是一个棘手的问题。在一般情况下,没有人会选择冒泡排序而不是其他排序算法。它真正有意义的唯一一次是当你 某些时,输入已经(几乎)已经排序了。
答案 6 :(得分:3)
如果您需要一种保证稳定且内存占用非常小的排序算法,我想您会选择冒泡排序。基本上,如果系统中的内存确实稀缺(并且性能不是问题),那么它将起作用,任何支持代码的人都可以轻松理解。如果您提前知道值已经大部分已经排序,这也会有所帮助。
即使在这种情况下,插入排序可能会更好。
如果这是一个技巧问题,下次建议Bogosort作为替代方案。毕竟,如果他们正在寻找糟糕的分类,那就是要走的路。
答案 7 :(得分:3)
冒泡排序很容易实现。虽然“标准”实现具有较差的性能,但是有一个非常简单的优化,与许多其他简单算法相比,它使其成为一个强有力的竞争者。谷歌'combsort',并看到几个很好的线条的魔力。 Quicksort仍然优于此,但实现起来并不那么明显,需要一种支持递归实现的语言。
答案 8 :(得分:3)
我可以想到冒泡排序的几个原因:
这是一个基本的基本排序。它们非常适合初学程序员学习if,for和while语句。
我可以想一些程序员的空闲时间来试验所有类型的工作方式。最好从顶部开始而不是冒泡排序(是的,这确实贬低了它的排名,但如果有人说'排序算法',谁不认为'冒泡排序'。)
非常容易记住并使用任何算法。
当我开始使用链接列表时,冒泡排序帮助我了解所有节点如何相互配合。
现在我感觉像是一个关于泡泡排序的蹩脚商业广告,所以我现在会保持安静。
答案 9 :(得分:2)
它对学校的“Baby's First Sort”类型的练习很有用,因为它很容易解释它是如何工作的,而且很容易实现。一旦你编写了它,并且可能只运行一次,就删除它,再也不要再想它了。
答案 10 :(得分:2)
如果您想快速尝试一下,可以使用Bubblesort。例如,如果您处于一个新环境中并且正在玩一个新想法,那么您可以在很短的时间内快速投入冒泡。记住并编写不同的排序并调试它可能需要更长的时间,但您仍然可能无法正确完成。如果你的实验成功,你需要使用真实的代码,那么你可以花时间来做正确的事。
如果您只是原型设计,那么在排序算法中投入大量精力是没有意义的。
答案 11 :(得分:2)
使用具体示例演示如何不实施排序例程。
答案 12 :(得分:1)
因为您的其他排序算法是Monkey Sort? ;)
严重的是,冒泡排序主要是出于教育原因的排序算法,没有实际价值。
答案 13 :(得分:1)
当数组已经“几乎”排序或者您已经在已排序列表中添加了少量数据时,您可以使用冒泡排序来求助它。冒泡排序通常适用于小型数据集。