我想计算选择排序算法中的比较次数:
在通常的算法中,我引入了一个计数变量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;
}
答案 0 :(得分:1)
只需更改第二个循环:
for(j=i+1;j<=n;j++)
为:
for(j=i+1;j<n;j++)
你应该从条件中删除等号。