选择排序中计算比较次数时出错
Error in counting number of comparisons in selection sort
我想统计选择排序算法的比较次数:
在通常的算法中,我引入了一个计数变量cont
,并且我已经初始化了它cont=0
。
密码是:
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
问题是,当我将其应用于 4 维向量时,说 a[1]=2,a[2]=1,a[3]=4,a[4]=3
然后print("%d",cont)
,输出结果是4200958
,比较的太多了,那么这里的错误在哪里呢?
编辑:正如@Arnold 指出的那样,我已经更正了向量初始化拼写错误,现在输出为 4,这也不正确,我希望结果为 6。那么这里的错误在哪里呢?
*完整代码下方已编辑:*
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
int main()
{
int a[4],cont;
cont=0;
a[0]=2;
a[1]=1;
a[2]=4;
a[3]=3;
selectionSort(a,4);
printf("%d",cont);
return 0;
}
只需更改第二个循环:
for(j=i+1;j<=n;j++)
至:
for(j=i+1;j<n;j++)
您应该从条件中删除等号。
我想统计选择排序算法的比较次数:
在通常的算法中,我引入了一个计数变量cont
,并且我已经初始化了它cont=0
。
密码是:
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
问题是,当我将其应用于 4 维向量时,说 a[1]=2,a[2]=1,a[3]=4,a[4]=3
然后print("%d",cont)
,输出结果是4200958
,比较的太多了,那么这里的错误在哪里呢?
编辑:正如@Arnold 指出的那样,我已经更正了向量初始化拼写错误,现在输出为 4,这也不正确,我希望结果为 6。那么这里的错误在哪里呢?
*完整代码下方已编辑:*
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
int main()
{
int a[4],cont;
cont=0;
a[0]=2;
a[1]=1;
a[2]=4;
a[3]=3;
selectionSort(a,4);
printf("%d",cont);
return 0;
}
只需更改第二个循环:
for(j=i+1;j<=n;j++)
至:
for(j=i+1;j<n;j++)
您应该从条件中删除等号。