您的位置:首页 > 其它

插入排序

2015-06-09 21:44 197 查看

一、基本思想

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。

//查找数值iData在长度为iLen的pDataArray数组中的插入位置
int FindInsertIndex(int *pDataArray, int iLen, int iData)
{
int iBegin = 0;
int iEnd = iLen - 1;
int index = -1;    //记录插入位置
while (iBegin <= iEnd)
{
index = (iBegin + iEnd) / 2;
if (pDataArray[index] > iData)
iEnd = index - 1;
else
iBegin = index + 1;
}
if (pDataArray[index] <= iData)
index++;
return index;
}

/********************************************************
*函数名称:BinaryInsertSort
*参数说明:pDataArray 无序数组;
*           iDataNum为无序数据个数
*说明:    二分查找插入排序
*********************************************************/
void BinaryInsertSort(int* pDataArray, int iDataNum)
{
for (int i = 1; i < iDataNum; i++)    //从第2个数据开始插入
{
int index = FindInsertIndex(pDataArray, i, pDataArray[i]);    //二分寻找插入的位置

if (i != index)    //插入位置不为i,才挪动、插入
{
int j = i;
int temp = pDataArray[i];
while (j > index)    //挪动位置
{
pDataArray[j] = pDataArray[j-1];
j--;
}
pDataArray[j] = temp;    //插入
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: