这个问题总是忘记,所以记录一下。
void insertSort(int a[],int n)
{
int i,j,pos;
for(i=1;i<n;i++)
{
pos=a[i];
for(j=i-1;j>=0&&a[j]>pos;j--)
a[j+1]=a[j];
a[j+1]=pos;
}
}
疑问:为什么需要pos这个变量,i在整个内循环不是一直都没有变过吗?
答案很简单,i是没有变过,但a[i]在插入排序的前移的过程中被覆盖了,所以要保存a[i]的值.其中在a[j+1]=a[j],这个前移等式中,a[j]是要插入的地方,但当此行结束后,for循环中还执行了j--,所以后面是a[j+1]=pos,而不是a[j]=pos.