我想知道冒泡排序的最佳情况是什么?例如,可能存在这样的情况,其中可能没有交换最后2次传球。我正在使用C语言编写程序。 假设我有一个包含5个元素的数组,并且我将元素作为1 2 5 4 3,那么在最后2个传递中没有变化?
答案 0 :(得分:26)
最佳案例场景是一次通过。该列表已经排序 没有交换=完成。
答案 1 :(得分:24)
最佳案例:如果列表已经排序,最好的情况就是如此。 a)会有比较,但没有交换和执行时间在O(n2) b)但是如果我们在每个通行证中保持交换的轨道并且如果没有交换则终止程序检查。然后该程序只需要一次传递和最大值。 (n-1)在单次通过中需要比较,我们可以说复杂度是O(n)的顺序。
答案 2 :(得分:11)
请参阅Bubble sort:
冒泡排序有最坏情况和平均值 复杂性О(n²),其中n是 被分类的项目数量。那里 存在许多排序算法 最糟糕的情况或 O(n log n)的平均复杂度。甚至 其他О(n²)排序算法,例如 作为插入排序,往往更好 性能比冒泡排序。 因此冒泡排序不是 n是时的实用排序算法 大。
- 最差情况 O(n²)
- 最佳案例表现 O(n)
- 平均案例绩效 O(n²)
- 最差案例空间复杂性 O(n)总计,O(1)辅助
- 最佳 否
答案 3 :(得分:2)
最好的情况是数据已经排序。另一个好例子是当有少量物品需要排序时 - 我曾经使用过它,当我的典型列表是两个项目时偶尔会有四个。
答案 4 :(得分:1)
很难说你的意思是
O(
n )
。 在后一种情况下,你没有,因为对于小案例,Shell sort和Insertion sort都会胜过它。我见过的一些性能最佳的排序例程是混合快速排序,它使用Shell排序来为阵列的“小”部分。
答案 5 :(得分:1)
气泡排序不可能换掉两次传球。
没有交换的传递意味着列表已经排序。
答案 6 :(得分:0)
冒泡排序很少是进行排序的最佳选择。它非常缓慢且效率低下。许多其他排序算法更快。例如,您可以考虑使用类似QuickSort的东西。
我所知道的最快的排序算法是由Steffan Nilsson开发的,并在以下文章中进行了描述。
http://www.ddj.com/architect/184404062;jsessionid=VWL2QD1NWIEIJQE1GHOSKHWATMY32JVN?_requestid=396640
如果您只是想知道如何实现冒泡排序,可以在这里找到一篇好文章。
答案 7 :(得分:0)
无论是维基百科还是我错了,但对我来说最好的情况和最坏的情况都是O(n2)这是 来自“算法导论”一书
BUBBLESORT(A)
1 for i = 1 to A.length - 1
2 for j = A.length downto i + 1
3 if A[j] < A[j - 1]
4 exchange A[j] with A[j - 1]
关于数组是否排序的问题,没有一个通过 becoz即使第4行被跳过,第2行和第3行也是按比例执行的 到n2次
编辑: 我想我得到它维基百科是正确的,但一个人必须修改 算法通过添加让我们说布尔变量is_exchange在进入第二个循环之前将其设置为false,如果在退出循环后它再次为假,那么我们就完成了,在那种情况下,时间将为O(n)becoz第二个循环执行n次