Algorithm 计算此选择排序实现的big-O复杂性?
我试图计算这个选择排序实现的大O时间复杂性:Algorithm 计算此选择排序实现的big-O复杂性?,algorithm,sorting,big-o,time-complexity,selection-sort,Algorithm,Sorting,Big O,Time Complexity,Selection Sort,我试图计算这个选择排序实现的大O时间复杂性: void selectionsort(int a[], int n) { int i, j, minimum, index; for(i=0; i<(n-1); i++) { minimum=a[n-1]; inde
void selectionsort(int a[], int n)
{
int i, j, minimum, index;
for(i=0; i<(n-1); i++)
{
minimum=a[n-1];
index=(n-1);
for(j=i; j<(n-1); j++)
{
if(a[j]<minimum)
{
minimum=a[j];
index=j;
}
}
if (i != index)
{
a[index]=a[i];
a[i]=minimum;
}
}
}
void selectionsort(int a[],int n)
{
int i,j,最小值,索引;
对于(i=0;i让我们从外部循环的内部开始。它对初始分配执行O(1)工作,然后有一个循环运行n-i次,最后执行O(1)更多工作以执行交换。因此,运行时为Θ(n-i)
如果我们将i从0到n-1相加,我们得到以下结果:
n+(n-1)+(n-2)+…+1
这个著名的总和等于Θ(n2),所以运行时是Θ(n2),匹配
希望这会有所帮助!正式地说,您可以使用以下方法获得具有增长顺序的确切迭代次数:
执行以下片段代码(原始代码的合成版本),sum
将等于T(n)的闭合形式
sum=0;
对于(i=0;i<(n-1);i++){
对于(j=i;j<(n-1);j++){
sum++;
}
}
到目前为止您尝试了什么?
sum = 0;
for( i = 0 ; i < ( n - 1 ) ; i ++ ) {
for( j = i ; j < ( n - 1 ) ; j ++ ) {
sum ++;
}
}