插入排序的基本操作是 “有序插入”,也就是将元素按照大小的排布逐一插入到一个有序的数组中。对于数组a[n]通常认为a[0]为长度为1的有序数组,然后按照有序插入法,将后面的数组元素逐一插入到有序组中,这样一来,有序组的长度将不断增长,最后到达整个数组的长度,即整个数组为有序组,至此排序完成。
如数组:[ 3 2 5 1 9] 进行直接插入排序的情况如下(加粗部分为有序序列):
[ 3 2 5 1 9 ]
[ 2 3 5 1 9 ]
[ 2 3 5 1 9 ]
[ 1 2 3 5 9 ]
[ 1 2 3 5 9 ]
C语言实现代码如下:
void Inert_Sort(int arr[], int len)
{
int i, j;
//将前面arr[0]的当成已经排好序的数列
for (i = 1; i < len; ++i)
{
int temp = arr[i];
//从右往左遍历有序数组
for (j = i - 1; j >= 0; --j)
{
//在有序数组中比temp值大的元素后移
if (temp < arr[j]) arr[j + 1] = arr[j];
else break; //temp大于有序数组中的最后一位则不需要移动
}
arr[j + 1] = temp;//插入有序表中
}
}