插入排序的思想是:在一个有序序列中插入一个新的数,并使插入序列保持有序。经过N-1次插入就能对一个长度为N的序列完成排序。
例如对长度为N的序列a,刚开始的有序序列只有一个元素,就是a[0],将a[1]插入到有序序列a[0]中,插入完成后,a[0]~a[1]成了有序序列,接着将a[2]插入到a[0]~a[1]中,插入完成后,a[0]~a[2]成了有序序列。依次类推,将a[3]……a[N-1]插入到当前的有序序列中。经过N-1次插入后,序列a就是一个有序序列。
如何将一个新的数插入到一个有序序列中呢?例如将将a[i]插入到有序序列a[0]~a[i-1]中。方法如下(小到大排序)
从有序序列的右边往左找,找到第一个小于或者等于a[i]的数,将a[i]插入到这个数的后面
具体的代码如下:
//插入排序
static void insertSort(int[] a)
{
int j=0;
int target=0;
for(int i=1;i<n;i++)//n为序列的长度
{
j=i;
target=a[j];
while(j>0 && target<a[j-1])//将a[i]插入
{
a[j]=a[j-1];
j--;
}
a[j]=target;
}
}