Algorithm(a-array, n-length):
for(i=2;i<=n;i++)
if(a[1]<a[i]) Swap(a,1,i);
for(i=n-1;i>=2;i--)
if(a[n]<a[i]) Swap(a,n,i);
我有兴趣确定Swap
在最坏的情况下在上面的代码中调用了多少次,所以我有一些问题。
那里最糟糕的情况是什么?
- 如果我只有第一个for循环,可以说这个算法最坏的情况是数组a已经按升序排序,Swap会被调用n-1次。
- 如果我只有第二个循环,最坏的情况也是a已经排序,但是这一次,顺序是降序的。这意味着如果我们考虑第一个最坏的情况,则
Swap
不会在第二个循环中调用,反之亦然,即不能在每次迭代的两个循环中调用它。
我现在该怎么办?如何结合这两个彼此相反的最坏情况?最坏的情况意味着我希望有尽可能多的 Swap 调用。:)
PS 我看到复杂度是 O(n),但我需要尽可能准确地估计交换执行了多少次。
编辑 1:Swap(a,i,j)
交换元素a[i]
和a[j]
.