1.折半插入排序
基本思想:与直接插入法排序思想基本相同,所不同的是对关键码的比较
方法上做了优化,采用了折半查找的方法。
基本思想:与直接插入法排序思想基本相同,所不同的是对关键码的比较
方法上做了优化,采用了折半查找的方法。
2.实现
看代码就很容易了
//折半插入排序
//升序
template <class Type>
BOOL BinaryInsertSort(Type *pData, int nLen)
{
ASSERT(pData != NULL);
Type tempData;
int nleft,nright,nmid;
for(int i=1; i<nLen; i++) //待排序的
{
nleft = 0;
nright = i;
nmid = (nleft + nright)/2; //折半取中间的数据比较
tempData = pData[i];
while(nleft <= nright) //觉定着退出条件
{
if(tempData > pData[nmid]) //决定降序还是升序
nleft = nmid+1; //向右移动一个区间
else
nright = nmid-1; //向左移动一个区间
nmid = (nleft + nright)/2; //折半取中
}
for(int j=i; j>nleft; j--) //依此后移
pData[j] = pData[j-1];
pData[j] = tempData;
}
return TRUE;
}