Straight Insertion,如何计算swap?
Straight Insertion, how to count swaps?
这听起来可能很愚蠢,但我需要确认。
例如我们有一个整数数组:
[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;
}
首先,这个算法是一个新算法(不完全是插入排序,但很接近)
现在,该算法执行的交换次数为 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;
}
这听起来可能很愚蠢,但我需要确认。 例如我们有一个整数数组:
[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;
}
首先,这个算法是一个新算法(不完全是插入排序,但很接近)
现在,该算法执行的交换次数为 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;
}