我想知道下面的排序是什么类型的排序,以及它在大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++;
}
}
}
谢谢:)
答案 0 :(得分:2)
这基本上是mergesort,但是有一个n ^ 2就地合并步骤。如果您执行标准数学运算,就像分析mergesort一样,您会发现它具有n ^ 2运行时间。您需要解决的相关等式是f(n) = n^2 + 2f(n/2)
。