实现插入排序时的答案差异
Difference in answers while implementing insertion sort
我尝试使用 while 和 for 循环在 C 中实现插入排序,如下所示:
#include <stdlib.h>
int main()
{
int a[]={4,7,8,2,16,21,12,3,1};
int n=sizeof(a)/sizeof(a[0]);
int j,k,i,x;
/*for(j=0;j<n;j++)
{
k=a[j];
for(i=j-1;i>=0 && k<a[i];i--)
a[i+1]=a[i];
a[i+1]=k;
}*/
for(i=1;i<n;i++)
{
k=a[i];
j=i-1;
while(j>=0 && a[j]>k)
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=k;
}
printf("The elements of the array are: ");
for(x=0;x<n;x++)
printf("%d ", a[x]);
return 0;
}
它工作得很好。但是,当我尝试删除变量 'k' 的使用时。答案打印如下:
我后面的代码如下:
#include <stdlib.h>
int main()
{
int a[]={4,7,8,2,16,21,12,3,1};
int n=sizeof(a)/sizeof(a[0]);
int j,k,i,x;
/*for(j=0;j<n;j++)
{
k=a[j];
for(i=j-1;i>=0 && k<a[i];i--)
a[i+1]=a[i];
a[i+1]=k;
}*/
for(i=1;i<n;i++)
{
//k=a[i];
j=i-1;
while(j>=0 && a[j]>a[i])
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=a[i];
}
printf("The elements of the array are: ");
for(x=0;x<n;x++)
printf("%d ", a[x]);
return 0;
}
有人可以解释一下吗?在 while 循环期间做任何改变变量 'i' 的值。
k=a[i]
保存值,因为 while
循环
while (...) {
a[j+1] =a[j];
}
在第一次迭代时覆盖 a[i]
,因为 j
从 i-1
开始,所以 j+1
在第一次迭代时是 i
。
我尝试使用 while 和 for 循环在 C 中实现插入排序,如下所示:
#include <stdlib.h>
int main()
{
int a[]={4,7,8,2,16,21,12,3,1};
int n=sizeof(a)/sizeof(a[0]);
int j,k,i,x;
/*for(j=0;j<n;j++)
{
k=a[j];
for(i=j-1;i>=0 && k<a[i];i--)
a[i+1]=a[i];
a[i+1]=k;
}*/
for(i=1;i<n;i++)
{
k=a[i];
j=i-1;
while(j>=0 && a[j]>k)
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=k;
}
printf("The elements of the array are: ");
for(x=0;x<n;x++)
printf("%d ", a[x]);
return 0;
}
它工作得很好。但是,当我尝试删除变量 'k' 的使用时。答案打印如下:
我后面的代码如下:
#include <stdlib.h>
int main()
{
int a[]={4,7,8,2,16,21,12,3,1};
int n=sizeof(a)/sizeof(a[0]);
int j,k,i,x;
/*for(j=0;j<n;j++)
{
k=a[j];
for(i=j-1;i>=0 && k<a[i];i--)
a[i+1]=a[i];
a[i+1]=k;
}*/
for(i=1;i<n;i++)
{
//k=a[i];
j=i-1;
while(j>=0 && a[j]>a[i])
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=a[i];
}
printf("The elements of the array are: ");
for(x=0;x<n;x++)
printf("%d ", a[x]);
return 0;
}
有人可以解释一下吗?在 while 循环期间做任何改变变量 'i' 的值。
k=a[i]
保存值,因为 while
循环
while (...) {
a[j+1] =a[j];
}
在第一次迭代时覆盖 a[i]
,因为 j
从 i-1
开始,所以 j+1
在第一次迭代时是 i
。