插入法的本质:
后面数j与前面数比较,然后找出最小的数,然后暂存,然后移位,然后插入。
类似于一个人来到一个队伍中,进行插队的场景,故美其名曰为插入法。
5 4 6 2 1 0
先将第1个数 5看做是一个对,第2个数来插队。 5>4,4必需插的在5前面 j=0;
4 5 看做一个对,6来插队,4<6 j=1;5<6 j=2; ,6插在5 后面,已经在5后面,故不需要动j=2
4 5 6 看做一个对 2 来插队。4>2,插队4 号前面,即0位置。
2 4 5 6 看做一对,1来插队,i=5,1<2 必需插在2 前面,即0位置
·1 2 4 5 6 看做一对,i=6,0来插队,0<1,必需插1前面
代码语言:javascript复制void insert_sort(int a[],int n)
{
int i=0,j=0;
//进行N-1轮插入过程
for(int i=1; i<n; i )
{
//首先找到元素a[i]需要插入的位置
int j=0;
while( (a[j]<a[i]) && (j<i))
{
j ;
}
//将元素插入到正确的位置
if(i != j) //如果i==j,说明a[i]刚好在正确的位置
{
int temp = a[i];
for(int k = i; k > j; k--)
{
a[k] = a[k-1];
}
a[j] = temp;
}
}