直接插入,如何计算掉期?

时间:2015-09-17 18:49:57

标签: algorithm count insertion

这可能听起来很愚蠢,但我需要确认。 例如,我们有一个整数数组:

 [4 2 1 3]

因此,当算法启动时,它应该像那样工作

 1. [2 4 1 3] 
 2. [1 2 4 3]  
 3. [1 2 3 4]

有人可以帮我计算每一步的掉期吗? 从我的角度来看,它可能是1次交换,2次交换,3次交换。它是否正确?感谢

算法:

for(i=1; i<N; i++)
{
    x = p[i];
    j = i -1;
    while(x<p[j] && j>=0)
    {
        p[j+1] = p[j];
        j = j-1;
    }
    p[j+1] = x;
}

1 个答案:

答案 0 :(得分:0)

首先,这个算法是一个新算法(它不是完全插入排序,但非常接近它)

现在,此算法执行的交换次数为0。它只是做任务,根本没有交换。如果您将while内的作业数量称为swaps,那么是的,您是对的。如果你想检查一下,只需编辑你的代码:

for(i=1; i<N; i++)
{
    x = p[i];
    j = i -1;
    int n=0;
    while(x<p[j] && j>=0)
    {
        p[j+1] = p[j];
        j = j-1;
        n++;
    }
    //output n, looks like c so
    printf("%d\n",n);
    p[j+1] = x;
}