c++ - 选择排序中计算比较次数时出错

标签 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 维 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/

相关文章:

c - 当每个文档可以采用两种类型之一时,如何生成文档集的所有可能排名?

php - semop 调用的 EINTR 错误

c - 多线程应用程序的调试工具

c++无法使选择排序正常工作

java - 为什么这个算法不能正确排序最后一个索引?

c++ - 如何为多线程客户端访问多个线程上的同一个套接字

c++ - 如何保护数组定义免受非零值初始化不完整的影响?

algorithm - 这个修改后的选择排序算法的运行时间是多少?

c++ - 没有互斥锁的基于模数的负载平衡?

C++ 模板友元运算符重载