这种排序算法的复杂性是什么?

时间:2011-11-10 23:44:30

标签: c++ sorting find complexity-theory

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的复杂性,但我在这一点上很困惑。这个算法的复杂性是多少?谁能解释一下?

2 个答案:

答案 0 :(得分:10)

这是Stooge sort。它是一种算法,用于表明业余爱好者在没有首先正确分析它们的情况下真的不应该实现自己的算法。它的运行时间约为O(n ^ 3)。

答案 1 :(得分:2)

进行计算并不太难。

  • 每次此算法对自身进行3次调用时,将当前步骤的输入部分分成3(相等)部分。 注意:第一个电话和第三个电话相同。
  • 局部复杂性只是一个O(1)(这意味着常数),因为它只会做一个交换,一个if和k的计算