这是什么样的排序,它的运行时间是多少?

时间:2012-09-17 18:44:55

标签: c++ algorithm sorting

我想知道下面的排序是什么类型的排序,以及它在大O表示法中的运行时间是多少?我的朋友在没有任何算法知识的情况下编写了这个排序函数,现在我们正在争论它的快速/内存效率。所以,请你帮我们分析一下。

void sort(int* a, int size)
{
    if (size <= 1) return;
    else if (size == 2)
    {
        if (a[0] > a[1])
            swap (a[0], a[1]);
        return;
    }
    else
    {
        int i = size / 2;
        sort(a, i);
        sort(a+i, size - i);
        int j = 0, k = i ;
        while (k < size && j < k)
        {
            if (a[j] > a[k])
            {
                int temp = k;
                while (temp > j)
                {
                    swap(a[temp - 1], a[temp]);
                    temp--;
                }
                k++;
            }
            j++;
        }
    }
}

谢谢:)

1 个答案:

答案 0 :(得分:2)

这基本上是mergesort,但是有一个n ^ 2就地合并步骤。如果您执行标准数学运算,就像分析mergesort一样,您会发现它具有n ^ 2运行时间。您需要解决的相关等式是f(n) = n^2 + 2f(n/2)