我想计算选择排序算法中的比较次数:
在通常的算法中,我引入了一个计数变量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++)
您应该从条件中删除等号。