代码如下
public void ShellSort()
{
int inner, temp;
int h = 3;
while (h > 0)
{
for (int outer = h; outer <= numElements - 1; outer++)
{
temp = arr[outer];
inner = outer;
while ((inner > h - 1) && arr[inner - h] >= temp)
{
arr[inner] = arr[inner - h];
inner -= h;
}
arr[inner] = temp;
}
h = (h - 1) % 3;
}
}
帮我分析分析这段代码的时间复杂度,我不太会算时间复杂度,所以想根据这个例子学习一下时间复杂度的算法,要按照这个例子帮我分析下
其实,也不难的,你慢慢想想。就是把程序从头到尾每条语句的执行次数加起来。也就是,一段代码执行次数的数量级。比如,赋值语句,算1;像 if 判断语句也算 1,因为,它只最多执行一次(执行一次,或不执行);而一个简单的循环语句,假设循环n次,就算n,但若是两层循环,外层到n,内层到m,那就是n×m。
全加起来。你会发现,时间体现的是数量级,所以,赋值语句和判断语句对数量级没有意义,也就是说,只有循环语句对计算时间复杂度有意义。比如,两层循环,外层n次,内层m次,那就执行 n×m 次,假设该循环前有一个赋值语句,那就是 n×m+1,再假设该循环后,有一个判断语句,那就是 n×m+1+1=O(n×m)。
另外,还要给出,最好和最坏的情况,看看程序分别能执行多少次。
能帮我分析分析这个例子么?