[英]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++)
您应该从条件中删除等号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.