您的位置:首页 > 运维架构 > Shell

排序算法--Shell排序

2014-01-05 21:40 190 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: