#include <stdlib.h>
template <typename T>
static void ShellSubSort(T iData[], size_t iBegin, size_t iEnd, size_t n)
{
if (iEnd < iBegin + n)
return;
size_t iCurPos = iBegin+n;
T iCurValue;
size_t p = 0;
while (iCurPos <= iEnd)
{
iCurValue = iData[iCurPos];
p = iCurPos-n;
while (p >= iBegin && iData[p] > iCurValue)
{
iData[p+n] = iData[p];
p -= n;
}
iData[p+n] = iCurValue;
iCurPos += n;
}
return;
}
template <typename T>
void ShellSort(T iData[], size_t iBegin, size_t iEnd)
{
//當iSteps[1] = {1}時,就退化爲插入排序
int iSteps[3] = {5,3,1};
for (size_t i = 0; i < sizeof(iSteps)/sizeof(int); i++)
ShellSubSort(iData, iBegin, iEnd, iSteps[i]);
return;
}
排序算法--Shell排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.