我想统计选择排序算法中的比较次数:
在通常的算法中,我引入了一个计数变量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 维 vector 时,假设 a[1]=2,a[2]=1,a[3]=4,a[4]=3
然后print("%d",cont)
,输出4200958
,比较太多了,所以错误在哪里这里?
编辑:正如@Arnold 所指出的,我已经更正了 vector 的初始化拼写错误,现在输出为 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++)
您应该从条件中删除等号。
关于c++ - 选择排序中计算比较次数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46876071/