#include <iostream>
using namespace std;//排序插入算法
int main()
{
int old[]={17,46,32,87,58,9,50,38};
int n=sizeof(old)/sizeof(old[0]);//数组元素个数
int j,save;//save临时保存前一个元素,j
for(int i=1;i<n;i++)
{
save=old[i];
for(j=i-1;j>=0&&save<old[j];j--)//核心代码
old[j+1]=old[j];
old[j+1]=save;
for(int i=0;i<n;i++)
cout<<old[i]<<" ";
cout<<endl;
}
return 11;
}
核心代码中:j>=0&&save<old[j]
检索 检索元素小于后者元素时进行for循环,一直检索到元素开头处。
一:如果检索元素大于第一个检索的后者元素的话则直接跳过for循环
old[j+1]=save使得检索元素等于save
二:如果检索元素小于第一个检索的后者元素的话则检索元素更新为第一个检索的后者元素
old[j+1]=save使得第一个检索的后者元素等于save
三:一和二的old[j+1]=save的差别就是j--是否执行了,j产生了变化
四:二的情况如果一直继续下去,第二个、第三个检索的后者元素,以检索元素继承第一个检索的后者元素 依次往前移,直到
old[j+1]=save使得检索元素移动到空出来的位置