我尝试使用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
。