这个排序算法的复杂度是多少?

发布于 2024-12-15 04:21:48 字数 371 浏览 0 评论 0原文

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);
}

我完全理解归并排序、冒泡排序的复杂性,但我对此感到非常困惑。该算法的复杂度是多少。谁能解释一下吗?

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);
}

I perfectly understood the mergeSort, bubbleSort complexities but i'm so confused in this one. What is the complexity for this algorithm. Can anyone explain?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一个人的旅程 2024-12-22 04:21:48

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

This is the Stooge sort. It's an algorithm constructed to show that amateurs really shouldn't implement their own algorithms without properly analyzing them first. Its running time is approximately O(n^3).

羞稚 2024-12-22 04:21:48

计算起来并不难。

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

It's not too hard to do the calc.

  • Every time this algorithm do 3 calls to itself splitting into 3 (equal) part the portion of the input of the current step. Note: The first call and the third are the same.
  • The local complexity is just a O(1) (which means constant) since it will do just a swap, an if and the calculation of k
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文