这可能听起来很愚蠢,但我需要确认。 例如,我们有一个整数数组:
[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;
}
答案 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;
}