插入排序的疑问
这个问题总是忘记,所以记录一下。
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.
总结
- 上一篇: C++中#if,#ifdef,ifnde
- 下一篇: sscanf简单用法