基本思想:当插入第i(i>=1)个对象时,前面的是已经排好序的,这时只需
找到它应该在的位置,依此后挪即可。
实现代码:
template<class Type>
BOOL InsertSort(Type *pData ,int nLen)
{
//要求传入正确的数据
ASSERT(pData != NULL);
//假如只有一条数据就不排序了
if(nLen <= 1)
return FALSE;
int i=0;
int nSwapIndex;
Type tempData;
BOOL bSwap = FALSE;
for(i=1; i<nLen; i++) //待排序的
{
tempData = pData[i]; //已此作为插入数据
bSwap = FALSE; //是否应当挪动数据
for(int j=0; j<i; j++) //已排好的
{
if(tempData - pData[j] < 0) //假如有不符合的数据就记录下位置
{
nSwapIndex = j;
bSwap = TRUE;
break;
}
}
//应当挪动数据
if(bSwap)
{
for(j=i; j>nSwapIndex; j--) //依此后移
{
pData[j] = pData[j-1];
}
pData[nSwapIndex] = tempData; //将值复过来
}
}
return TRUE;
}