我想知道冒泡排序的最佳情况是什么?例如,可能存在这样的情况,其中可能没有交换最后2次传球.我正在使用C语言编写程序.假设我有一个包含5个元素的数组,并且我将元素作为1 2 5 4 3,那么在最后2个传递中没有变化?
jga*_*ant 28
最佳案例场景是一次通过.该列表已经排序.
没有交换=完成.
小智 24
最佳案例:最好的情况是如果列表已经排序.a)将进行比较,但没有交换和执行时间在O(n2)b)但是如果我们在每个通道中保持交换的轨道并且如果没有交换则终止程序检查.然后该程序只需要一次传递和最大值.(n-1)在单次通过中需要比较,我们可以说复杂度是O(n)的量级.
小智 6
有多种编写气泡排序算法的方法,随着时间的流逝,该算法似乎变得越来越好,越来越高效。我学到的第一个气泡排序算法如下。最佳和最差情况下的算法为O(n ^ 2)。
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]
Run Code Online (Sandbox Code Playgroud)
维基百科使用的算法(如下)似乎是对标记的改进,它可以使用标记来告知元素是否已被交换,这使得气泡排序算法的最佳情况是O(n)而不是O(n ^ 2)
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
Run Code Online (Sandbox Code Playgroud)
这是一段视频,可以帮助您稍微解释一下C编程语言中的第一种算法:https : //youtu.be/qOpNrqqTsk4