2011-11-10 12 views
3
template<class T> void sSort(T *A, int first, int last) 
{ 
    if(A[first]>A[last]) 
     swap(A[first],A[last]); 

    if(first+1>=last) 
    return; 
    double k = floor((last-first+1)/3); 


    sSort(A,first,last-k); 
    sSort(A,first+k,last); 
    sSort(A,first,last-k); 
} 

私はmergeSort、bubbleSortの複雑さを完全に理解しましたが、私はこのように混乱しています。このアルゴリズムの複雑さは?誰でも説明できますか?このソートアルゴリズムの複雑さは何ですか?

+0

あなたはサイズの異なるいくつかの配列でそれを実行し、その時間が配列のサイズとどのように比較するかを見ることができます... – Mehrdad

答えて

10

を行うので

  • ローカル複雑さはわずかO(1)(定数を意味する)です。これは、アマチュアが最初に適切に解析することなく、独自のアルゴリズムを実装してはならないことを示すために構築されたアルゴリズムです。実行時間は約O(n^3)です。

  • +0

    ありがとうございます、このリンクは私にさらなるドキュメントに到達するのを助けます。 – LuckySlevin

    +0

    誰が誰かを発明しましたか? – AShelly

    2

    これほど計算が難しくありません。

    • このアルゴリズムは、現在のステップの入力の部分を3(等しい)部分に分割する呼び出しを毎回実行します。 :最初の呼び出しと3番目の呼び出しは同じです。それはこれがStooge sortあるだけスワップ、AN場合及びkの計算
    +2

    私はこの種のものでは錆びますが、再帰呼び出しは重複する値域で動作します。 – Lars

    +0

    私は実際に3つの呼び出しで立ち往生しました、私はそれらを計算することはできません、私はちょっとクレイジー:) – LuckySlevin

    +0

    実際にアルゴリズムが動作しますが、ゆっくりと、それを実行しようとすることができます:)。アルゴリズムにミスタイプはありません。 – LuckySlevin