算法系列之插入排序
时间复杂度:O(n^2)
空间复杂度:O(1)
图示:
图中深色的方块代表本次迭代待插入的元素,即程序中的i,每次都要向前比较,找到合适的插入位置,相应的元素依次后移
/** @brief 插入排序
*
* @param pData int* 待排序数组
* @param nSize int 待排序数组大小
* @return void
*
*/
void InsertSort( int *pData, int nSize )
{
for ( int i = 1; i < nSize; ++i )
{
int j = i - 1;
int nTmp = pData[i];
// 用一个tmp把当前位置的值保存起来,然后依次把tmp值和前面的值想比较
// 并且把前面的值依次往后移,直到找到合适的插入位置,缺点是即使当前值有序,
// 也要进行两次赋值,一次给tmp,一次给自己
while ( j >= 0 && pData[j] > nTmp )
{
pData[j + 1] = pData[j];
--j;
}
// 把当前值插入到合适的位置
pData[j + 1] = nTmp;
}
}