【问题标题】:Straight Insertion, how to count swaps? [closed]直接插入,如何计算掉期? [关闭]
【发布时间】:2015-09-17 18:49:56
【问题描述】:

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

 [4 2 1 3]

所以当算法启动时,它应该像那样工作

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

有人可以帮我计算每一步的交换次数吗? 从我的角度来看,它可能是 1)1 次交换,2)2 次交换,3)1 次交换。这个对吗?谢谢

算法:

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;
}

【问题讨论】:

  • 使用哪种算法?插入排序?
  • 直接插入是我老师所说的。我猜它是插入排序。我在我的帖子中包含了算法

标签: algorithm count insertion


【解决方案1】:

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

现在,此算法执行的交换次数为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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多