插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
把一个数据插入到有序序列中使之仍然有序,但是有序序列长度逐渐增长,
第一次把第一个数当有序 序列 ,拿出第二个数 插入
以此类推
概括为挖坑-逆序比较-后移-填坑
![](https://images2015.cnblogs.com/blog/934540/201605/934540-20160520111522826-388979099.png)
开始,i=1,j=0,temp=a[i],把a[0]当成第一个长度为1的有序序列,取出待插入数(a[1]从第二个开始)放到一边去(存到temp中),也就挖了一个坑出来,开始从后往前与temp比较
大于temp ,a[j]后移(此时坑位也向前移动了一个位置)记录坑位,再与j前面的j-1比较,直至j=0或temp>a[j]为止,将temp插入填坑
关键字 : 挖坑 - 倒序比较-后移-记录坑位置-填坑
代码思路
先把第一个数当成 一个长度为1的有序序列,取出第二个数,现在空位是位置2,然后从后往前开始比较,若取出来的数小于被比较数则被比较数后移,然后被比较熟换成它前面的一个数继续比较
//1确定插入位置, 2后移,
class insertOrder:order
{
private int[] a;
private int Local = 0; //记录插入位置
private int temp = 0,i=0,j=0;
public insertOrder(int[] b)
{
a = b;
}
public int[] orderBy()
{
for (i = 1; i < a.Length;i++ )
{
temp = a[i]; //把a[i] 取出来, 从第二个记录开始
for ( j = i-1 ; j >= 0 && (temp < a[j]); j--)
{
a[j + 1] = a[j];//后移
Local = j;//记录需要插入位置,记录坑位
}
a[Local] = temp;//插入
}
return a;
}
}