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がすでに昇順でソートされており、スワップがn-1回呼び出されることであると言えます。
- 2番目のループしかない場合、最悪のケースはaがすでにソートされていることですが、今回は順序が降順になります。つまり、最初の最悪のケースを考える
Swap
と、は2番目のループで呼び出されず、その逆も同様です。つまり、各反復で両方のループで呼び出すことはできません。
私は今どうすればいい?互いに反対の2つの最悪のケースをどのように組み合わせるのですか?最悪の場合は、できるだけ多くのスワップ呼び出しが必要であることを意味します。:)
PS複雑さはO(n)であることがわかりますが、スワップが実行される回数をできるだけ正確に見積もる必要があります。
編集1:Swap(a,i,j)
要素a[i]
とを交換しますa[j]
。