我正在完成一项家庭作业,我需要在大小 n 的数据集中找到修改后的冒泡排序所做的比较次数。要考虑的数据集是一个排序列表,其中第一个和最后一个元素被交换,例如:52341。下面是算法的伪代码:
i <- n-1; new_i <- i
while i > 0 do
for j=1 to i do
if A[j] > A[j+1] do
A[j] <=> A[j+1]
new_i <- j
endif
endfor
i <- new_i - 1; new_i <- i
endwhile
A是数据集,&lt; =&gt;是交换。
我试图找到一种方法来表示这种算法的总结,将其简化为给定数据集类型的比较量的表达式。
如果没有给出答案,任何人都能把我推向正确的方向吗?
答案 0 :(得分:2)
在Bubblesort实现中,比较次数完全取决于输入的大小,即输入列表中元素的顺序无关紧要。
如果你能证明这一点(这不是很难),那么计算一个大小为N的输入列表的比较次数就足够了。因为我们已经证明顺序无关紧要,这又相当容易:
我们有两个循环,外部while
循环和内部for
循环。外部循环从n到1(或n-1到0,但肯定不是从n-1到1,如代码所示),即我们有N次迭代。内循环从1到i。
因此,我们在外环的第一次迭代中进行N次比较,第二次在第二次迭代中进行N次比较,在第三次中进行N-2,在N-N'中进行0次。
我认为你是独自来到这里的。否则,无论如何你都被搞砸了。
您的老师现在想要看到的是您知道以下公式,即所谓的“GaußscheSummenformel”,也称为“高斯和”:
N +(N-1)+(N-2)+ ... +(N-N + 1)+(N-N)= N ^ 2/2 + N / 2
所以你在这里应该做的是:
- )