1

この選択並べ替えの実装の時間の複雑さを計算しようとしています。

void selectionsort(int a[], int n)                    
{
    int i, j, minimum, index;                       
    for(i=0; i<(n-1); i++)                       
    {
        minimum=a[n-1];                      
        index=(n-1);                             
        for(j=i; j<(n-1); j++)                   
        {
            if(a[j]<minimum)                     
            {
                minimum=a[j];                               
                index=j;
            }
        }
        if (i != index)
        {
            a[index]=a[i];
            a[i]=minimum;
        }
    }
}    

どうすればこれを行うことができますか?

4

2 に答える 2

1

正式には、以下の方法を使用して、成長の順序で正確な反復回数を取得できます。

ここに画像の説明を入力

次のフラグメント コード (元のコードの合成バージョン) を実行sumすると、閉じた形式の T(n) と等しくなります。

sum = 0;
for( i = 0 ;  i < ( n - 1 ) ; i ++ ) {    
    for( j = i ; j < ( n - 1 ) ; j ++ ) {
        sum ++;
    }
}
于 2014-04-14T11:45:42.090 に答える