for循环第一次j=1的时候,key=a[1]=5,i=1-1=0;while循环内满足了条件后,语句a[i+1]=a[i]执行,结果为a[0+1]=a[0]=10(a[1]被赋值为10了,a[0]的值确实仍为初始值10)。然后i--,i就变为-1,退出循环。while循环外的语句a[i+1]=key正是在这里就不多余了,将5赋值给a[0]。不可以换成a[j-1]=key的。这只是特例。下一次j=2时的情况就只能是a[i+1]=key了。若“换成a[j-1]=key”就错了。