排序算法之直接插入(C/C++实现)

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)

由时间复杂度可看出,排序元素比较少的时候很好,大量元素便会效率低下

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bde3b492b717720b51bb03b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞