在选择排序中计算比较次数时出错

时间:2017-10-22 15:51:17

标签: c++ c 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;

}

1 个答案:

答案 0 :(得分:1)

只需更改第二个循环:

for(j=i+1;j<=n;j++)

为:

for(j=i+1;j<n;j++)

你应该从条件中删除等号。