我在理解大O符号和计算复杂性等方面遇到了很多麻烦。我认为我在互联网上发现的所有复杂数学都让我眼花缭乱。
我试图绘制一个图表来表示插入排序和shell排序的效率。
我想我明白shell排序的最坏情况是n ^ 2,最好的情况是nlogn。这适用于所有shell类型吗?如何在具有相关时间轴的图表中表示这一点?
任何帮助都会非常感激,我很失落。
如果相关,这是我的shell排序代码。
int const size = 5;
int i, j, increment, temp;
int array[size]={4,5,2,3,6}, i1=0;
//split the array into segments between the elements unil we reach beginning of array
for(increment = size/2;increment > 0; increment /= 2)
{
//increment through elements in array for comparison starting point
for(i = increment; i<size; i++)
{
//set temp to last element in array segment
temp = array[i];
//decrement index by size of gap
for(j = i; j >= increment ;j-=increment)
{
//compare element with element gap length behind
if(temp < array[j-increment])
{
//swap elements if less than gap element
array[j] = array[j-increment];
}
else
{
//if not break from loop
break;
}
}
array[j] = temp;
}
}
答案 0 :(得分:1)
如何在具有相关时间轴的图表中表示这一点? - N,输入的大小,是您的自变量,以横轴(x)表示 - 绘制垂直轴(y)中的N ^ 2(最坏情况) - 还绘制垂直轴(y)中的NlogN(最佳情况)