插入排序思想和选择排序一样单纯,一个有序区和一个无序区,初始状态都是无序的,然后每次从无序区取出一个元素,插入有序区他应该在的位置,直到无序区元素为0,此时,所有的元素排序完毕,代码实现如下:
版本一
void EX_SortInsert(int a[], int n)
{
for (int i = 1; i < n; ++i) { //i从1开始,a[0]默认为已经排好序,也就是第一个元素是有序区
a[-1] = a[i]; //下标为-1,作为哨兵元素,防止下标越界
int j = i - 1;
for (; a[j] > a[-1]; --j) { //当前元素大于哨兵元素,则往后移位
a[j + 1] = a[j];
}
a[j + 1] = a[-1]; //空出的位置即为应该插入的位置
}
return;
}
有待改进。