void InsertSort(int nArr[], int nLen)
{
int i, j;
int nTemp;
for (i = 1; i < nLen;++i)
{
nTemp = nArr[i];
for (j = i - 1; j >= 0 && nTemp<nArr[j];j--)
{
nArr[j + 1] = nArr[j];
}
nArr[j+1] = nTemp;
}
}
解析:nArr[i-1]为已经排序好的元素,取出下一个要插入的元素nTemp=nArr[i]依次与倒序nArr[j] nArr[j-1]…比较, 若遇到nTemp<nArr[j],则将nArr[j]向后移动,为nArr[j+1]=nArr[j],依次类推,直到nTemp>=nArr[j], 则将元素插入到nArr[j]位置(由于存在最后一个j–,故需要nArr[j+1] = nTemp)
时间复杂度:最好情况下,顺序已从小到大排好,只需对比n-1次,为O(n)
最坏情况下,顺序从大到小排列,需要对比1 、2、3、、、n-1次,合计n(n-1)/2,为
O(n^2 )
空间复杂度:无需额外空间,即为O(1)
由时间复杂度可看出,排序元素比较少的时候很好,大量元素便会效率低下